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

C# 启动时启动应用程序,使用错误的加载路径,c#,winforms,visual-studio-2010,registry,C#,Winforms,Visual Studio 2010,Registry,我正在使用注册表项将应用程序设置为在Windows启动时加载(用户登录后)。 我的代码: 因此,使用这段代码,我的应用程序在启动时加载,但是工作目录是 C:\Windows\System32 有人知道为什么吗 这对我不起作用,因为该程序需要在同一目录中的两个文件才能运行。如果程序加载到我选择的目录(“C:\Users\Name\Desktop”)上,那么问题就不存在了 有人对此有什么建议吗?目录。SetCurrentDirectory()可用于在应用程序启动时设置您的工作目录。可以使用Appli

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

因此,使用这段代码,我的应用程序在启动时加载,但是工作目录是

C:\Windows\System32

有人知道为什么吗

这对我不起作用,因为该程序需要在同一目录中的两个文件才能运行。如果程序加载到我选择的目录(“C:\Users\Name\Desktop”)上,那么问题就不存在了


有人对此有什么建议吗?

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

把它们放在一起:

var fi = new FileInfo(Application.ExecutablePath);
Directory.SetCurrentDirectory(fi.DirectoryName);

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

这对我来说很有效,但如果有人有更好的方法,我很乐意听到。

嗨,请检查我的答案。这就是你的意思吗?我对你的意思有点困惑,但你的想法让我想到读取注册表以获取目录路径并将其设置为currentpath。谢谢(:我认为使用Application.ExecutablePath比从注册表获取值更干净:Pwow,你的权利。它确实有效。谢谢!我投票认为这是最好的答案。为什么要返回注册表,而不是在入口点中添加一行只设置当前目录。不是很干净,而且容易出现问题。
        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);