実現したいこと
複数のVSプロジェクトで個別のEXEファイルを生成し、そのEXEファイルの一覧を表示し、EXEファイル名がクリックされた際に該当するEXEファイルを実行しようとするツールを作成しています。
前提
ソリューションは、ファイル一覧を表示するプロジェクト(主プロジェクト)と、その一覧に表示されるプロジェクト(従プロジェクト)から成り立っています。プロジェクトはすべて、使用するプラグインの関係上 x86(32bit)で動作するようなビルドを行っています。
また、主プロジェクトで生成されるEXEファイルと従プロジェクトで生成されるEXEファイルは同一ではないディレクトリに出力され、主プロジェクトは従プロジェクトが出力したEXEファイルのパスをもとに起動処理を行います。
発生している問題・エラーメッセージ
コードは、ListViewの中に配置したハイパーリンク要素をクリックした際に発火するイベントとして実装しています。
該当のソースコードの通り実行すると、EXEファイルが存在しているにもかかわらず、
System.ComponentModel.Win32Exception (0x80004005): 指定されたファイルが見つかりません。
が例外として出力されてしまいます。
該当のソースコード
C#
1 try 2 { 3 // item.ToolPath には、従プロジェクトの有効なEXEファイルパスが格納されている 4 if (!File.Exists(item.ToolPath)) 5 { 6 MessageBox.Show("実行ファイルが見つかりませんでした。"); 7 } 8 9 using (var proc = new Process()) 10 { 11 proc.StartInfo.FileName = item.ToolPath; 12 proc.StartInfo.Arguments = string.Empty; 13 proc.Start(); 14 proc.WaitForExit(); 15 } 16 17 } 18 catch (Exception ex) 19 { 20 Console.WriteLine(ex); 21 }
試したこと
- 検索で回避策を探した(有効な方法は見つからなかった)
- 従プロジェクトのEXEファイルの絶対パスを直接指定した
→ 結果変わらず
- 従プロジェクトを主プロジェクトの参照に追加し、Threadから起動するようにしてみた
→ System.InvalidOperationException: '同じ AppDomain 内で、複数の System.Windows.Application インスタンスを作成することはできません。'
と怒られてしまう
C#
1 Thread thread = new Thread(() => SubProject.App.Main(new string[] { })); 2 thread.SetApartmentState(ApartmentState.STA); 3 thread.Start();
補足情報(FW/ツールのバージョンなど)
開発マシン:Windows 10
ターゲット:.NET Framework 4.8(全プロジェクト共通)
アーキテクチャ:x86(32bit)
IDE:Visual Studio 2022
ネット検索をし、可能性のありそうな方法を試した上での質問ですが、回避策が見つからず考えあぐねている状況です。
お力添えいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー