我正在使用注册表项将我的应用程序设置为在Windows Startup上加载(用户登录后)。 我的代码:
RegistryKey RegKey = Registry.LocalMachine;
RegKey = RegKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
RegKey.SetValue("AppName", "\"" + @"C:\Users\Name\Desktop" + "\"");
RegKey.Close();
因此,使用此代码,我的应用程序在启动时加载,但工作目录是
C:\ Windows \ System32下
有谁知道为什么?
这对我不起作用,因为该程序需要在与该操作相同的目录中的几个文件。如果程序加载在我选择的目录(“C:\ Users \ Name \ Desktop”)上,那么问题将不存在。
有人对此有任何建议吗?
答案 0 :(得分:4)
Directory.SetCurrentDirectory()
可用于设置工作目录。可以使用Application.ExecutablePath
检索EXE路径。
把它们放在一起:
var fi = new FileInfo(Application.ExecutablePath);
Directory.SetCurrentDirectory(fi.DirectoryName);
答案 1 :(得分:-1)
我已经找到了如何实现这一目标的廉价技巧。 当您的应用程序启动时,请再次阅读注册表以获取应用程序的启动路径(您打算使用的路径)。 例如:Appl1的启动路径为“C:\ Users \ Name \ Desktop \ App1.exe”。
读取该路径的注册表后,将其设置为当前目录。 像这样:
RegistryKey RegKey = Registry.LocalMachine;
RegKey = RegKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", false);
string Path = RegKey.GetValue("App1.exe").ToString();
Path = Path.Replace(@"\App1.exe"", ""); // Now it's a valid directory.
Directory.SetCurrentDirectory(Path);
这对我有用,但如果有人有更好的方法,我很乐意听到它们。