【问题标题】:Starting application on start-up, using the wrong path to load在启动时启动应用程序,使用错误的路径加载
【发布时间】:2012-11-05 04:16:29
【问题描述】:

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

有人对此有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

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

    把它们放在一起:

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

    【讨论】:

    • 嗨,请检查我的回答。这是你的意思吗 ?我对你的意思有点困惑,但你的想法让我想到了读取注册表以获取目录路径并将其设置为当前路径。谢谢(:
    • 我认为使用 Application.ExecutablePath 比从注册表中获取值更干净:P
    • 哇,你的权利。它确实奏效了。谢谢!我将其投票为最佳答案。
    【解决方案2】:

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

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

    【讨论】:

    • 为什么要绕回注册表而不是在您的入口点中添加一行来设置当前目录。不是很干净,容易出问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2013-02-16
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多