Теукщая папка приложения при автозапуске
Есть приложение, которое загружает и сохраняет параметры в 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 шт):
Когда программа запускается двойным щелчком в Проводнике, в качестве рабочей директории используется папка, в которой программа лежит. Но в общем случае не нужно надеятся на то что рабочая директория будет совпадать с директорией, в которой находится исполняемый файл.
Вместо этого, необходимо вычислять путь до исполняемого файла, и использовать его при доступе ко всем файлам программы. Вычислить путь можно разными способами, для приложения Windows Forms:
string appDir = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
using (FileStream fs = new FileStream(Path.Combine(appDir, "data.xml"), FileMode.OpenOrCreate))
{
...
}