我对此感到困惑,我很难解释,但让我们试试这个..
我串行运行一些安装程序,然后启动一个单独的进程来运行配置程序。
安装通过控制台、exe 和 msi 文件运行干净且简单。
start = new ProcessStartInfo();
start.WindowStyle = ProcessWindowStyle.Hidden;
start.CreateNoWindow = true;
start.Arguments = s.args;
start.FileName = tempDir + "/" + s.executable;
start.CreateNoWindow = true;
Process.Start(start).WaitForExit();
配置程序设置一些注册表值并读取一些由安装设置的值。我正在运行的程序是我必须运行配置两次才能读取值...
if (winVer == 32)
{
//Console.WriteLine("Enter 32 bit");
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\KEY\Settings");
workingDir = key.GetValue("WorkingDir").ToString();
//Console.WriteLine(key);
key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\KEY");
installPath = key.GetValue("InstallPath").ToString();
//Console.WriteLine(key);
key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\KEY\Runtime\
sdkPath = key.GetValue("Path").ToString();
//Console.WriteLine(key);
}
第一次执行此函数时,它会为所有注册表项返回空值(存在有效的错误处理,只是没有定位)但是如果我立即退出控制台应用程序并重新生成它,上述键都可以完美读取。
从安装密钥到何时可以读取注册表,是否存在某种延迟。还是在安装后阅读之前我应该强制在注册表上进行某种刷新?
关于如何克服这一点但更重要的是为什么会发生这种情况的任何信息都是有益的
在 Windows 7 中首次启动程序之前,注册表中不存在注册表项,我的程序尝试获取密钥然后启动最终程序,但是我需要切换它。
这让我开始启动程序......我正在启动这个过程
ProcessStartInfo start = null;
start = new ProcessStartInfo();
start.WindowStyle = ProcessWindowStyle.Hidden;
start.CreateNoWindow = true;
start.FileName = proc;
Process.Start(start).WaitForInputIdle();
然而,这会产生更多问题,因为该过程是 2step 它加载主程序然后将文件加载到其中(此代码适用于此)但导致主程序在文件加载到程序之前进入inputIdle循环的问题,导致整个应用程序继续让我回到没有找到注册表项