前提・実現したいこと
親プロセスから複数の子プロセスを実行するプログラムを作成。
親プロセスを強制終了するときに、子プロセスも一緒に終了させたい。
発生している問題・エラーメッセージ
AssignProcessToJobObjectを使用して子プロセスをジョブ登録する方法で、
VisualStudioから親プロセスとなる実行ファイル(exe)を実行した際は意図通りの挙動をしますが、
親プロセスとなる実行ファイルをVisualStudioを介さずに実行すると、
AssignProcessToJobObject実行時に「アクセスが拒否されました」のエラーが発生し、
子プロセスの登録に失敗します。
(実行ファイルの場所は生成された場所、他の場所どちらでも失敗しました)
該当のソースコード
■ジョブ登録処理呼び出し箇所
c#
1 // 子プロセスを作成する 2 using (Process child = new Process()) 3 { 4 ~中略~ 5 // 子プロセスを起動する 6 child.Start(); 7 8 //ジョブに登録 9 job.AssignProcess(child); 10 11 // 子プロセスの終了を待機する 12 child.WaitForExit(); 13 } 14
■ジョブ登録処理
c#
1 public void AssignProcess(System.Diagnostics.Process process) 2 => AssignProcess(process.SafeHandle); 3 4 public void AssignProcess(SafeProcessHandle hProcess) 5 { 6 if (hProcess.IsInvalid) 7 throw new ArgumentException(nameof(hProcess)); 8 9 if (!Native.AssignProcessToJobObject(SafeHandle, hProcess)) 10 { 11 StringBuilder message = new StringBuilder(255); 12 13 FormatMessage( 14 FORMAT_MESSAGE_FROM_SYSTEM, 15 IntPtr.Zero, 16 (uint)Marshal.GetLastWin32Error(), 17 0, 18 message, 19 message.Capacity, 20 IntPtr.Zero); 21 22 Console.WriteLine("AssignProcessToJobObject failed:"+message.ToString()); 23 throw new Win32Exception(); 24 } 25 else 26 { 27 Console.WriteLine("AssignProcessToJobObject Success"); 28 } 29 }
試したこと
・manifestファイルにてアクセス権限を管理者権限に設定
→挙動に変化ありませんでした
補足情報(FW/ツールのバージョンなど)
・Windows7 Pro SP1 64bit
・VisualStudio2017 .NET Framework4.7
・PCのアクセス権は管理者となっています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。