Добрых суток всем.
Столкнулся с одной, непонятной штукой.
В коде некоторого приложения есть такие строчки:
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".
Уважаемые господа эксперты, кто может объяснить столь непонятное поведение?
Объяснение получено.
Дело всё в виндовой фишке, связанной с WorkingDirectory. Относительный путь вычисляется не от места, где расположен exe, а от контекста запуска exe файла.
Простой пример:
Если приложение вызвать из командной строки следующим образом: "C:\Program Files\SomeApplication\>Subfolder\Applicatiion.exe", то WorkingDirectory будет следующей: "C:\Program Files\SomeApplication\" и все относительный пути будут вычисляться от этой точки.
Век живи, век учись блин
Всем спасибо за внимание.