Что это такое и как с этим бороться
От: ref_Tyoma Россия  
Дата: 26.05.08 02:46
Оценка:
Добрых суток всем.

Столкнулся с одной, непонятной штукой.
В коде некоторого приложения есть такие строчки:


if (Dictionary.Exists(path)) {
  //Something
}


можно так, значение не имеет:


DictionaryInfo path = new DictionaryInfo(path);
if (path.Exists) {
  //Something
}


path — это относительный путь.

Данное приложение запускается, при загрузке винды. И вот здесь эта непонятная штука. Если запускать его через автозагрузку, то всё проходит нормально (path существует). Но если запускать через реестр, то path оказывается неверным.

Провёл небольшое исследование и обнаружил ещё более странную вещь. Пример: Приложение расположено по такому пути: "C:\Program Files\SomeApplication\Subfolder", path = "..\Subfolder2\". Так вот path каким-то непонятным образом становится таким: "C:\Documents and Settings\Subfolder2" вместо "C:\Program Files\SomeApplication\Subfolder2".

Уважаемые господа эксперты, кто может объяснить столь непонятное поведение?
Temet nosce
Re: Что это такое и как с этим бороться
От: ref_Tyoma Россия  
Дата: 26.05.08 03:30
Оценка:
Объяснение получено.

Дело всё в виндовой фишке, связанной с WorkingDirectory. Относительный путь вычисляется не от места, где расположен exe, а от контекста запуска exe файла.

Простой пример:
Если приложение вызвать из командной строки следующим образом: "C:\Program Files\SomeApplication\>Subfolder\Applicatiion.exe", то WorkingDirectory будет следующей: "C:\Program Files\SomeApplication\" и все относительный пути будут вычисляться от этой точки.

Век живи, век учись блин

Всем спасибо за внимание.
Temet nosce
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.