通过我的桌面应用程序的安装程序(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),我可以轻松阅读注册表项。好像我在开始这个过程时做错了什么。有人有什么想法吗?
谢谢, 卡皮尔
答案 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;
}