.NET Windows Servis- błąd przy podczytaniu App.config

0

Cześć.

Mam taki problem: chciałem sobie stworzyć serwer za pomocą Windows Service. Mam jednak taki problem: gdy go instaluję w systemie i uruchamiam, dostaję błąd, że nie może znaleźć pliku konfiguracyjnego:

System.IO.FileNotFoundException: Can't read the .config file 'CarWinService.exe.config' because of the Exception 'System.IO.FileNotFoundException: Can't find the file (Exception from HRESULT: 0x80070002)
   in System.BaseConfigHandler.RunParser(String fileName)
   in System.ConfigTreeParser.Parse(String fileName, String configPath, Boolean skipSecurityStuff)
   in System.Runtime.Remoting.Activation.RemotingXmlConfigFileParser.ParseConfigFile(String filename)
   in System.Runtime.Remoting.RemotingConfigHandler.LoadConfigurationFromXmlFile(String filename)'.
   in System.Runtime.Remoting.RemotingConfigHandler.LoadConfigurationFromXmlFile(String filename)
   in System.Runtime.Remoting.RemotingConfigHandler.DoConfiguration(String filename, Boolean ensureSecurity)
   in System.Runtime.Remoting.RemotingConfiguration.Configure(String filename, Boolean ensureSecurity)
   in CarWinService.CarService.OnStart(String[] args) w c:\Users\Paweł\Documents\Visual Studio 2013\Projects\CarWinSe...

Chociaż taki plik istnieje w folderze, z którego instalowałem mój serwer i ma identyczną nazwę.
Co może być powodem tego błędu?

1

Sprawdź dla pewności gdzie jest zainstalowana ta usługa (panel usług w panelu sterowania == services.msc, będzie ścieżka podana). Config musi być w tamtym folderze (tym samym co .exe) - na pewno znajduję sie tam plik z taką nazwą?

Uruchamiasz jako usługę?

0

Usługa jest zainstalowana w folderze, w którym jest plik konfiguracyjny o identycznej nazwie, sprawdziłem.
Uruchamiam jako usługę (jeżeli rozumiesz przez to opcję "Uruchom usługę" w panelu usług).

Wciąż ten sam błąd. Usługa działa jeżeli nie podłączam żadnego pliku konfiguracyjnego (ale wtedy oczywiście nie mam zarejestrowanych żądanych typów).

bbe76daf66.png

52a089a4ee.png

0

Dla pewności możesz sprawdzić co wypluwa:

Directory.GetCurrentDirectory()

Domyślnie windows service jest uruchamiany w %WinDir%\CośTam.

0

Spróbowałem zrobić tak jak mówisz. Dodałem w kodzie linijkę:
2a30962dc0.png

A potem w programie DebugView wyłapałem ścieżkę:
869c255e9b.png

Jednak, mimo tego, że umieściłem tam plik konfiguracyjny, błąd wciąż jest ten sam ;/

Nie mam pojęcia o co chodzi.

EDIT:
Znalazłem gdzieś na innym forum, że dla Windowsa 7 64bit, jest to folder C:\SysWOW64, kiedy dodałem tam plik konfiguracyjny, wszystko pięknie działa.
Dlaczego zatem wyświetla mi komunikat z dostępem do System32?

1

Nie kopiuj nic tylko zmień katalog:

private static void Main()
{
	var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
	Directory.SetCurrentDirectory(path);
        // lub
        System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
	// itd.
	ServiceBase.Run(new abcd());
}
0

Właśnie miałem pisać, że dodałem w metodzie OnStart() linijkę:
451d236b64.png

Twój sposób również działa, dziękuję:)

Zastanawia mnie tylko, czemu "wypluło" CurrentDirectory jako System32? To jest jakoś przekierowywane do SysWOW64 w systemie 64bitowym?

1

https://msdn.microsoft.com/pl-pl/library/windows/desktop/aa384187%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
Jako dygresja: jeżeli chcesz sprawdzić, gdzie jakiś program szuka pliku, użyj w tym celu procmona z sys internals suite.

1 użytkowników online, w tym zalogowanych: 0, gości: 1