1

私はこれについて混乱しており、説明するのは難しいですが、これを試してみましょう..

いくつかのインストール プログラムを連続して実行し、別のプロセスを起動して構成プログラムを実行します。

インストールは、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();

構成プログラムは、いくつかのレジストリ値を設定し、インストールによって設定されたいくつかを読み取ります。私が実行しているプログラムは、値を読み取るために構成を2回実行する必要があるということです...

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);
            }

この関数を初めて実行すると、すべてのレジストリ キーに対して null 値が返されます (サイトに配置されていない有効なエラー処理があります)。

キーの挿入から読み取り可能になるまで、レジストリの読み取りに何らかの遅延がありますか。または、インストール後に読み取る前にレジストリを強制的に更新する必要がありますか?

これを克服する方法に関する情報はありますが、さらに重要なのは、なぜこれが発生するのかということです。

Windows 7 で最初にプログラムを起動するまでレジストリ キーがレジストリ内に存在しないようです。私のプログラムはキーを取得してから最終的なプログラムを起動しようとしますが、これを切り替える必要があります。

これにより、プログラムを起動することができます...私はプロセスを起動しています

        ProcessStartInfo start = null;

        start = new ProcessStartInfo();
        start.WindowStyle = ProcessWindowStyle.Hidden;
        start.CreateNoWindow = true;
        start.FileName = proc;

        Process.Start(start).WaitForInputIdle();

ただし、これはプロセスが2ステップであるため、メインプログラムをロードしてからファイルをロードするため、さらに問題が発生します(このコードはそのために機能します)が、ファイルがプログラムにロードされる前にメインプログラムがinputIdleループに入るという問題が発生します。レジストリキーが見つからない状態に戻し続けるためのアプリケーション全体

4

0 に答える 0