我有一个WPF应用程序,如果我启动计算机,我想自动启动它。
我有一个窗口,用户可以在其中配置应用程序的某些设置,其中一个可能的配置选项是一个复选框,该复选框允许用户关闭或启用应用程序以在系统启动时自动启动。
这是我根据注册表中用户的选择设置或删除注册表中值的方法:
try
{
var currentAssembly = Assembly.GetExecutingAssembly();
var rkApp = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
if (settingsViewModel.AutostartEnabled)
{
rkApp.SetValue(currentAssembly.GetName().Name, currentAssembly.Location);
}
else
{
rkApp.DeleteValue(currentAssembly.GetName().Name, false);
}
}
catch (Exception exception)
{
}
我的问题是,即使应用程序已注册并且也可以在任务管理器的“自动启动”部分中看到,但每次重新启动计算机以检查应用程序是否启动时,都会出现以下错误:
“您正在尝试打开应用程序扩展(.dll)类型的文件”
那么我在做什么错了?有什么办法可以避免或修复此错误?我已经尝试将应用程序清单文件添加到我的项目中,以始终以管理员身份启动我的应用程序。但这似乎也不起作用。
我将不胜感激。
答案 0 :(得分:2)
尝试使用System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
代替currentAssembly.Location
。
这应该为您提供正在运行的可执行文件的路径。 Assembly.GetEntryAssembly
不会。