2017-11-24 7 views
0

私はちょうどアプリケーションを実行している場合、ウィジェットがコントロールするアップデータを作成しました。Process.GetProcessessByName does not work

Process[] processOfApp = Process.GetProcessesByName(setting.ExeName); 
if (processOfApp.Length == 0) 
{ 
    Program = StartProcess(realPath + "\\" + setting.ExeName + ".exe"); 
    AppDir = realPath + "\\" + setting.ExeName + ".exe"; 
    ProcessExtensions.StartProcessAsCurrentUser(AppDir); 
} 

アプリプロセスがない場合はプロセスを開始します。しかし、これらのコードは複数のインスタンスを開始します。

どうしたのですか?

編集:これらのコードブロックはwhile(true)にあり、コード内の唯一の開始プロセスです。

答えて

3

あなたはそれが何をしているか知らずにどこかからこれをコピーしたかもしれませんか?私はStartProcess関数がプロセスを開始すると推測しています。そして、私は仮定します。ProcessExtensions.StartProcessAsCurrentUserもそうです。だから、1つではなく複数(2つ)のプロセスを開始します。アップデーターがWindowsサービスから現在のユーザー用のプログラムを実行する必要がある場合は、Program = ...行を削除し、後でその情報を取得します(例えばProcess.GetProcessesByNameを使用)。そうすれば、アップデーターは現在のユーザーとして実行されます。これはおそらくあなたが望むものです。

// This line starts an instance 
Program = StartProcess(realPath + "\\" + setting.ExeName + ".exe"); 
AppDir = realPath + "\\" + setting.ExeName + ".exe"; 
// This line also starts an instance 
ProcessExtensions.StartProcessAsCurrentUser(AppDir); 
+0

実際にはありません。プロセスを開始する機能だけがこのブロックです。 –

+2

@MarijkeBuurlage - この答えは、そのブロックに、プロセスを開始しようとするように見える* 2つの*関数呼び出しがあることを指摘しようとしています。 'StartProcess'と' StartProcessAsCurrentUser'のどちらかが*本当に悪い名前になっているか、2つのプロセスを開始しようとしています。 –

+0

ええ。私はそれを完全に逃した。バックグラウンドでStartProcessアプリケーションを開くと、startProcessAsUserが追加され、それを忘れてしまいます。サポートありがとうございます。 –

関連する問題