2016-10-29 51 views
0

私のコードを正しくインデントしなかった場合、事前にお詫び申し上げますが、これは私の最初の投稿です。ですから、私の最終目標は、notepad.exeプロセスが開始され、それに応答してmspaint.exeが起動されたときにイベントを監視するWindowsサービスを作成することです。これはWindowsサービスで初めての作業ですが、このコードをコンソールアプリケーションとして、またデバッグモードでWindowsサービスとして動作させることができました。しかし、私がそれをインストールしてリリースとしてテストするときは、うまくインストールされ、問題なく起動しますが、notepad.exeを起動すると何も起こりません。Windowsサービス上のManagementEventWatcherはデバッグでは動作しますが、インストール時には動作しません

**MyNewService.cs** 
public MyNewService() 
{ 
InitializeComponent(); 
System.IO.File.Create(AppDomain.CurrentDomain.BaseDirectory +"Initialized.txt"); 
} 
public void OnDebug() 
{ 
OnStart(null); 
} 
protected override void OnStart(string[] args) 
{ 
WqlEventQuery query = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_Process\""); 
ManagementEventWatcher watcher = new ManagementEventWatcher(query); 
watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived); 
watcher.Start(); 
} 
protected override void OnStop() 
{ 
System.IO.File.Create(AppDomain.CurrentDomain.BaseDirectory + "OnStop.txt"); 
} 

static void watcher_EventArrived(object sender, EventArrivedEventArgs e) 
{ 
string instanceName = ((ManagementBaseObject)e.NewEvent["TargetInstance"])["Name"].ToString(); 
if (instanceName.ToLower() == "notepad.exe") 
{ 
Process.Start("mspaint.exe"); 
} 
} 
} 
**Main Program** 
static class Program 
{ 
/// <summary> 
/// The main entry point for the application. 
/// </summary> 
static void Main(string[] args) 
{ 
#if DEBUG 
MyNewService myService = new MyNewService(); 
myService.OnDebug(); 
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); 
#else 
ServiceBase[] ServicesToRun; 
ServicesToRun = new ServiceBase[] 
{ 
new MyNewService() 
}; 
ServiceBase.Run(ServicesToRun); 
#endif 
} 
} 

答えて

0

は解決:

をサービスは、実際の作業ではないことを確立しました。問題は、いったんインストールされたlocalSystemとして実行され、バックグラウンドサービスのみしか表示されず、デスクトップにアクセスできないということでした。それは不可視モードでpaint.exeを起動していました。あなたがサービスのデバッグビルドを使用する場合、それが働いた理由を説明していないこと、いや、うーん

https://www.reddit.com/r/csharp/comments/5a5uof/advice_managementeventwatcher_on_a_windows/

+0

:下記のリンクを参照してください。あなたの質問はあまり正確ではなかったかもしれませんが、それを修正してください。 –

+0

ローカルシステムでサービスをインストールして実行したサービスインストーラを使用しました。デバッグはIDEで実行され、ローカルシステムでは実行されませんでした。デバッグとビルドは同じことを成し遂げました。バックグラウンドでしかビルドできませんでした。これは、「すべてのユーザーを表示」チェックボックスを使用してタスクマネージャーを監視することによって確認されました。 これは、パッチ適用時にサードパーティのソフトウェアをコマンドプロンプトでメンテナンスモードにするために開発されたものです。コマンドプロンプトを表示する必要がないので、実際には必要に応じて作業しました。このコードは11月以降の大規模な生産環境であり、問​​題は発生していません。 –

関連する問題