2013-02-18 127 views
0

我正在编写一个应用程序,需要在用户每次安装后启动计算机时才能工作。我试图在afterInstall事件中的安装程序上做到这一点,但安装程序会将它自己放到注册表中,并在Windows重新启动时运行,所以我尝试使用提交的事件执行此操作并获得相同的结果。之后,我将提交的属性安装程序类别归类为false,但是后来的evet不会触发。我的最后一次尝试是在安装后运行应用程序,然后让它自己写入注册表中,并发生了一件奇怪的事情,它向注册表做了一些事情,但是没有到我想要的地方,有人知道这是为什么,怎么可以我修复它?如何将我的应用程序登录到Windows注册表?

我的代码:

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(); 
+0

“没有我想让它成为的地方”......那么这就引发了问题...... *它究竟是在哪里写下来的呢? – Arran 2013-02-18 09:50:48

+0

我不知道我serched整个注册表,我couldent找到它... – user1839169 2013-02-18 09:58:15

+0

你在运行什么操作系统? 64位或32位?如果Vista/7/8是否在使用或不使用UAC(用户帐户控制)的情况下运行应用程序? – Arran 2013-02-18 10:03:58

回答

0

你试图打开子根键水木清华这样的:

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

,然后让你的子项:

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

+0

这个kinnda的作品 – user1839169 2013-02-18 11:37:11

+0

它获取它在注册表中的所有用户目录,但那好,谢谢:) – user1839169 2013-02-18 11:38:01

+0

,但它仍然写入当前用户insted的所有用户部分 – user1839169 2013-02-18 12:06:58

相关问题