UACフォルダーの仮想化の処理にも問題があることがわかったので、回避策を提案しますが、うまくいくはずです。
これは、昇格されたプロセスが仮想化されたもの(CMIIW)ではなく、常に元のコピーを使用するという仮定に基づいています。また、あなたが処理したセットアップが昇格して実行されたと思います
アイデアは、メインインストーラーが実行する必要のある「一般的な」プロセス(昇格されていないレガシー)を作成することです。このプロセスにより、ユーザーが選択したフォルダーに、両方のプログラムが認識している名前と内容のファイル名が作成されます(たとえば、test73819704.bin)。フォルダが仮想化されている場合、このファイルはユーザーVirtualStoreに表示され、元のファイルには表示されないようにする必要があります(インストーラーの観点と特権の観点から)。
したがって、選択したC:\ Program_Files_But_Not_NecessicallyおよびProcess-1(昇格)の場合
- プロセス1は、ファイルC:\ Program_Files_But_Not_Necessarily\test73819704.binがないことを確認します
- 標高なしでProcess-2を起動します
- プロセス2は、C:\ Program_Files_But_Not_Necessarily \ test73819704.binを作成し、それが実際に存在するかどうかを確認します。存在する場合は、適切な戻りコードで返されます。存在しない場合は、「失敗した」コードで返されます。
- プロセス1はプロセス2を待機し、結果を分析します。良ければ、C:\ Program_Files_But_Not_Necessarily \ test73819704.binをチェックし、存在する場合は「ビンゴ!仮想化は発生しませんでした」、存在しない場合は「悪い、他のストレージの場所を見つけましょう」に進みます。Process-2のコードが「失敗」した場合は、ユーザーにエラーメッセージを表示します。
残念ながら、現時点ではテストできませんでしたが、動作するはずであり、この背後にロジックがあります。Process-2では、メインプログラムの動作をエミュレートするだけです)