在Windows启动时启动WPF应用程序

11

我开发了一个WPF应用程序,现在我需要将该应用程序在Windows启动时启动。
为此,我编写了以下代码。 我从这个答案中获得了解决方案。
它能够向注册表中添加键但无法启动应用程序。

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
string str = Assembly.GetExecutingAssembly().Location;
key.SetValue("Camaleone", str);

1
当应用程序启动时,它将具有工作目录C:\ windows \ System32。确保任何对其需要的文件的引用都在正确的目录中查找。 - SmithMart
meaning??please explain it. - Neal
你的应用程序中放置了代码片段吗?因为如果它不在主(可执行)程序集中,它将无法工作。 - Hamlet Hakobyan
它被放置在主窗口中。 - Neal
另一个想法是,你的应用程序是否需要管理员权限才能运行?如果是这样,根据操作系统的不同,它可能会被用户账户控制(UAC)阻止。 - SmithMart
无需管理员权限的应用程序。 - Neal
1个回答

12

当您通过双击启动应用程序时,工作目录通常是exe文件的路径。 这意味着如果您在代码中引用任何设置文件,它可以找到它们。

但是,当您将其添加到注册表以在启动时运行时,工作目录是c:\windows\system32,因为它由Windows本身启动。

我通常使用这个:

public static string BaseDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
这意味着BaseDir现在是exe文件的路径。 每当我引用任何文件,例如设置文件,我会使用:
string mySettingsFile = Path.Combine(BaseDir, "MySettingsFile.xml");

在您的情况下,您可以设置Environment.CurrentDirectory - Hamlet Hakobyan
2
小心使用 Environment.CurrentDirectory,它会返回工作目录,因此你可能会陷入同样的困境。 - SmithMart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接