5

我正在使用注册表项将我的应用程序设置为在 Windows 启动时加载(用户登录后)。我的代码:

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”),那么问题就不会存在。

有人对此有什么建议吗?

4

2 回答 2

6

Directory.SetCurrentDirectory()可用于在应用启动时设置您的工作目录。EXE 路径可以使用Application.ExecutablePath.

把它们放在一起:

var fi = new FileInfo(Application.ExecutablePath);
Directory.SetCurrentDirectory(fi.DirectoryName);
于 2012-11-05T04:22:25.463 回答
0

我想出了一个便宜的技巧来实现这一点。当您的应用程序启动时,再次读取注册表以获取应用程序的启动路径(您想要的路径)。例如: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);

这对我有用,但如果有人有更好的方法,我很想听听他们的意见。

于 2012-11-05T04:51:52.767 回答