Теукщая папка приложения при автозапуске

Есть приложение, которое загружает и сохраняет параметры в xml файлах. Файлы xml находятся в одной папке с исполняемым файлом. При отладке и при запуске exe вручную все работает нормально. Но если я ставлю программу в автозапуск через реестр - выдается ошибка. Приложение запускается, но пытается искать xml файлы в папке windows\system32, не находит их и вылетает с ошибкой. Вызов файла:

using (FileStream fs = new FileStream(@"data.xml", FileMode.OpenOrCreate))
        {

        }

Код устанавливающий автозапуск

Microsoft.Win32.RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
rkApp.SetValue("app", Application.ExecutablePath.ToString());

Почему текущей папкой при таком автозапуске оказывается system32, и как это можно вылечить?


Ответы (1 шт):

Автор решения: arrowd

Когда программа запускается двойным щелчком в Проводнике, в качестве рабочей директории используется папка, в которой программа лежит. Но в общем случае не нужно надеятся на то что рабочая директория будет совпадать с директорией, в которой находится исполняемый файл.

Вместо этого, необходимо вычислять путь до исполняемого файла, и использовать его при доступе ко всем файлам программы. Вычислить путь можно разными способами, для приложения Windows Forms:

string appDir = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
using (FileStream fs = new FileStream(Path.Combine(appDir, "data.xml"), FileMode.OpenOrCreate))
{
...
}
→ Ссылка