在启动时启动应用程序,使用错误的路径加载

时间:2012-11-05 04:16:29

标签: c# winforms visual-studio-2010 registry

我正在使用注册表项将我的应用程序设置为在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”)上,那么问题将不存在。

有人对此有任何建议吗?

2 个答案:

答案 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);

这对我有用,但如果有人有更好的方法,我很乐意听到它们。