从使用System.Diagnostics.Process.Start()方法启动的进程访问注册表条目

时间:2010-04-26 13:15:27

标签: registry

通过我的桌面应用程序的安装程序(C#代码),我想执行一个外部进程。我这样做是使用以下代码。

            ProcessStartInfo sinfo = new ProcessStartInfo();
            sinfo.FileName = filePath;
            sinfo.WorkingDirectory = workingDir;
            sinfo.UseShellExecute = false;
            using (Process proc = Process.Start(sinfo))
            {
                proc.WaitForExit();
                int code = proc.ExitCode;
            }

我的外部进程基本上是尝试读取一个注册表项并使用它来处理(它只读取,不写入reg)。

虽然我确认安装程序已经更新了注册表项值(并且我可以通过regedit手动读取注册表项),但外部进程无法读取这些内容。它试图阅读如下:

                using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(regKey))
                {
                    return (string)rk.GetValue(subKey);
                }

当我在上面的行放置一个断点时,我看到rk里面没有子键。我在Win7环境中做了所有这些(不知道UAC是否造成了麻烦)

现在,当我手动直接运行外部应用程序时(即双击应用程序的exe),我可以轻松阅读注册表项。好像我在开始这个过程时做错了什么。有人有什么想法吗?

谢谢, 卡皮尔

1 个答案:

答案 0 :(得分:0)

您可能遇到访问问题。

尝试填写sinfo.username和sinfo.password属性,并确保具有管理访问权限的用户启动该过程

 ProcessStartInfo sinfo = new ProcessStartInfo();
        sinfo.FileName = filePath;
        sinfo.WorkingDirectory = workingDir;
        sinfo.UseShellExecute = false;
        sinfo.UserName = "username1";
        SecureString password = new SecureString();
        foreach (char c in "password1".ToCharArray()) {
           password.AppendChar(c);
        }
        sinfo.Password = password;
        using (Process proc = Process.Start(sinfo))
        {
            proc.WaitForExit();
            int code = proc.ExitCode;
        }