Даже если есть способ указать другой рабочий каталог для вашего приложения, указанный в реестре - вы должны действительно исправить это в приложении. Причина в том, что существует несколько способов открыть файл данных с вашим приложением, и вы просто не можете исправить это для всех из них. Рассмотрим
D: \> c: \ Programs \ MyApp \ MyApp.exe \\ public \ foo \ data.ext
где программа запускается с именем файла (в виде UNC-пути), который открывается в качестве параметра и выполняется в совершенно другом каталоге. Я регулярно делаю подобные вещи и ожидаю, что приложения будут работать в таких условиях.
Обратите внимание, что установка рабочего каталога на корневой каталог приложения после запуска не очень хорошая идея, поскольку относительные пути будут неправильными. Правильное решение означает изменение приложения таким образом, чтобы оно работало корректно, независимо от того, каким является текущий рабочий каталог, путем использования полностью определенных путей внутри.
Edit:
Ваш комментарий
Но тогда это означает, что мое приложение полностью зависит от реестра. Что является трудным для тестирования разработки, если каждый раз, когда я запускаю свою сборку dev, она загружает все файлы для установленной версии
но это не обязательно так. Вы можете прочитать путь к исполняемому в данный момент исполняемому файлу, используя функцию GetModuleFileName()
или ее эквивалентную оболочку в библиотеке GUI (например, Application.ExeName
в Delphi). Установить рабочий каталог по этому пути легко, я просто не думаю, что это хорошая идея, так как изменение рабочего каталога нарушает относительные пути, которые пользователь может ожидать от работы. Это не совсем правда, что
Windows запускает EXE из файла, который вы дважды щелкнули. Это, кажется, исключительный случай, в других случаях EXE всегда запускается там, где я ожидаю.
потому что может быть много способов, как приложение может быть выполнено с другим рабочим каталогом, чем путь к самому исполняемому файлу. Хорошее поведение программы не предполагает, что они равны. Это делает использование приложения в скриптах или из командной строки намного сложнее.