Текущий рабочий каталог для сервиса
От: Аноним  
Дата: 23.01.11 17:30
Оценка:
Если сохранить файл без указания абсолютного пути , например "result.txt" он сохраняется в случае консольного приложения туда где находится exe-файл, в случае сервиса он сохраняется в system32, можно ли для сервиса изменить текущий каталог чтоб он сохранял файл рядом с exe сервиса ?
Re: Текущий рабочий каталог для сервиса
От: Аноним  
Дата: 23.01.11 18:15
Оценка:
Здравствуйте, Аноним, Вы писали:

Если сервис ваш, можно попробовать как-то так:
string exePath = System.Reflection.Assembly.GetEntryAssembly().Location;
string exeDir = System.IO.Path.GetDirectoryName(exePath);
System.IO.Directory.SetCurrentDirectory(exeDir);


или/и передавать рабочую папку в параметре командной строки, обрабатывать командную строку естественно также придется внутри сервиса.
Способа задать рабочую папку сервиса снаружи не знаю.
Re: Текущий рабочий каталог для сервиса
От: MozgC США http://nightcoder.livejournal.com
Дата: 23.01.11 18:20
Оценка: +2
Здравствуйте, Аноним, Вы писали:

А>Если сохранить файл без указания абсолютного пути , например "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 и др.).
Re: Текущий рабочий каталог для сервиса
От: mrjeka Россия  
Дата: 24.01.11 11:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Если сохранить файл без указания абсолютного пути , например "result.txt" он сохраняется в случае консольного приложения туда где находится exe-файл, в случае сервиса он сохраняется в system32, можно ли для сервиса изменить текущий каталог чтоб он сохранял файл рядом с exe сервиса ?


AppDomain.CurrentDomain.BaseDirectory
Re[2]: Текущий рабочий каталог для сервиса
От: Sinix  
Дата: 24.01.11 13:23
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Здравствуйте, Аноним, Вы писали:


А>>Если сохранить файл без указания абсолютного пути , например "result.txt" он сохраняется в случае консольного приложения туда где находится exe-файл, в случае сервиса он сохраняется в system32, можно ли для сервиса изменить текущий каталог чтоб он сохранял файл рядом с exe сервиса ?


M>AppDomain.CurrentDomain.BaseDirectory

В общем случае неверно. Лучше (по памяти) — Process.GetCurrentProcess().MainModule.FileName.

Или см http://stackoverflow.com/questions/199961/getting-full-path-for-windows-service
Re[3]: Текущий рабочий каталог для сервиса
От: mrjeka Россия  
Дата: 27.01.11 09:40
Оценка:
Здравствуйте, Sinix, Вы писали:

M>>AppDomain.CurrentDomain.BaseDirectory

S>В общем случае неверно.

А чем не верно?
Re[4]: Текущий рабочий каталог для сервиса
От: Sinix  
Дата: 27.01.11 09:54
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>>>AppDomain.CurrentDomain.BaseDirectory

S>>В общем случае неверно.

M>А чем не верно?

Для нового домена можно явно задавать base directory.

Если включена shadow copy, на реальное расположение сборки тоже лучше не полагаться.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.