0

我正在编写一个应用程序,该应用程序需要在用户安装后每次计算机启动时运行。我尝试在 afterInstall 事件中的安装程序 calss 上执行此操作,但安装程序将其放入注册表并在 Windows 重新启动时运行,因此我尝试使用提交的事件执行此操作并得到相同的结果。之后,我将提交的属性安装程序类更改为 false,但随后提交的事件不会触发。我的最后一次尝试是在安装后运行该应用程序,然后让它自己写入注册表,发生了一件奇怪的事情,它确实在注册表中扭动,但没有到我想要的地方有没有人知道为什么会这样以及怎么能我修复它?

我的代码:

bool registry = true;

RegistryKey rkSubKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", false);
string[] values = rkSubKey.GetValueNames();

foreach(string name in values)
{

  if (name.Equals("appName"))
    registry = false;
}

if (registry)
{

  RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
  rkApp.SetValue("appName", Application.ExecutablePath.ToString());
  DialogResult r = MessageBox.Show("The system now needs to restart your computer whould you like to do it now?", "Restart is needed", MessageBoxButtons.YesNo);
  if (r == DialogResult.Yes)
  {
    System.Diagnostics.Process.Start("ShutDown", "/r");
  }
  return;
}
mainModule.start();
4

1 回答 1

0

您是否尝试过像这样打开子根密钥:

var HKLM = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser,   Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32);

然后获取您的子项:

var baseKey = HKLM.OpenSubKey(...<the path here>..)

?

于 2013-02-18T09:32:19.553 回答