ここに私の問題があります: C# プログラムから既に実行中のプロセスを閉じる必要があります。問題は、プロセスがアイコン (タスクバーに最小化) として実行されるようになり、ユーザーが少なくとも 1 回開かない限り (無人マシンでは決して起こらない)、メイン ウィンドウが表示されないことです。
私が持っている他の要件は、アプリケーションが強制終了されずに閉じられることです。メモリバッファをディスクに書き込むために必要です-それを強制終了するとデータが失われます。
これが私がこれまでに試したことです:
foreach (Process proc in Process.GetProcesses())
{
if (proc.ProcessName.ToLower().StartsWith("myapp"))
{
if (proc.MainWindowHandle.ToInt32() != 0)
{
proc.CloseMainWindow();
proc.Close();
//proc.Kill(); <--- not good!
}
}
}
ウィンドウが最小化されたときにMainWindowHandle == 0であることを発見した後、 if句を追加しました。ifを削除しても解決しません。CloseMainWindow()もClose( ) も機能しません。Kill()はありますが、上記のように、私が必要としているものではありません。
難解な Win32 API 関数の使用を含め、どんなアイデアも受け入れられます :)