Если сохранить файл без указания абсолютного пути , например "result.txt" он сохраняется в случае консольного приложения туда где находится exe-файл, в случае сервиса он сохраняется в system32, можно ли для сервиса изменить текущий каталог чтоб он сохранял файл рядом с exe сервиса ?
Здравствуйте, Аноним, Вы писали:
А>Если сохранить файл без указания абсолютного пути , например "result.txt" он сохраняется в случае консольного приложения туда где находится exe-файл,
Это не совсем так. При указании относительного пути файл будет сохранен в текущую рабочую директорию приложения (её можно получить с помощью метода Directory.GetCurrentDirectory()), которая может быть задана при старте приложения, а также изменена во время работы приложения. По умолчанию — да — текущая рабочая директория приложения указывает на каталог, в котором находится запускаемое приложение.
>в случае сервиса он сохраняется в system32, можно ли для сервиса изменить текущий каталог чтоб он сохранял файл рядом с exe сервиса ?
Можно получить директорию, в которой находится запущенный ехе-файл с помощью методов Path.GetDirectoryName(Application.ExecutablePath) или Path.GetDirectoryName(Assembly.GetAssembly(typeof(MyClass)).CodeBase). Но имейте в виду, что у вашего сервиса может не быть прав на сохранение файла в том же каталоге, где находится сервис. Если такая ситуация возможна, то можно сохранить файл во временной каталог (Path.GetTempPath()), или в ApplicationData (см. SpecialFolder.ApplicationData, Application.LocalUserAppDataPath и др.).
Здравствуйте, Аноним, Вы писали:
А>Если сохранить файл без указания абсолютного пути , например "result.txt" он сохраняется в случае консольного приложения туда где находится exe-файл, в случае сервиса он сохраняется в system32, можно ли для сервиса изменить текущий каталог чтоб он сохранял файл рядом с exe сервиса ?
Здравствуйте, mrjeka, Вы писали:
M>Здравствуйте, Аноним, Вы писали:
А>>Если сохранить файл без указания абсолютного пути , например "result.txt" он сохраняется в случае консольного приложения туда где находится exe-файл, в случае сервиса он сохраняется в system32, можно ли для сервиса изменить текущий каталог чтоб он сохранял файл рядом с exe сервиса ?
M>AppDomain.CurrentDomain.BaseDirectory
В общем случае неверно. Лучше (по памяти) — Process.GetCurrentProcess().MainModule.FileName.
Здравствуйте, mrjeka, Вы писали:
M>>>AppDomain.CurrentDomain.BaseDirectory S>>В общем случае неверно.
M>А чем не верно?
Для нового домена можно явно задавать base directory.
Если включена shadow copy, на реальное расположение сборки тоже лучше не полагаться.