2017-01-24 16 views
-1

ABC.exeアプリケーションを開いて実行するWindowsサービスを作成しました。私はこれを行うには悪い習慣であることを知っているこの理由のためにdownvoteいない私は瞬間に他のオプションを持っていない。私はこのことについて多くの研究をしており、インタラクティブな方法を見つけ出しました。私はこのリンクを使用しました:https://code.msdn.microsoft.com/windowsapps/CSCreateProcessAsUserFromSe-b682134e ローカルのシステムアカウントを手動で設定する必要があります。デスクトップとの対話 "ボックスに表示されます。私が今やりたいことは、インストール時にデフォルトでチェックされている設定です。そのため、ユーザーがサービスをインストールする際には、サービスを実行状態にする必要があります(サービスを手動で開始する必要はありません)。私はここにいくつかの同様の投稿を見ているが、彼らはすべて別のコンソールアプリケーションを作成し、system.management.managementobjectを使用するような外部のアプリケーションからサービスを開始する方法を示しています。私は、サービス自体にいくつかのコードを追加する方法があるのか​​、それをどこに追加するのか知りたいですか? ps:私はこのサービスをwindows vista + systems用に作成しています。Windowsサービスのインストール時に「サービスとデスクトップとの対話を許可する」をデフォルトでオンにする方法

私はこの問題をかなりの間抱えています。前もって感謝します。私はあなたが提案する何

+0

? 'ServiceInstaller'クラスを使用していますか? – zaitsman

+0

はい。私は、私はそれを自動的に開始するコードを書いているafterinstallという名前のメソッドを持っているプロジェクトインストーラクラスがあります。 –

+0

http://stackoverflow.com/questions/4237225/allow-service-to-interact-with-desktop-in-windows? –

答えて

0

は、インストーラクラスでレジストリ

に直接値を変更OnCommitted(System.Collections.IDictionary savedState)メソッドをオーバーライドしています。その方法では

、そうのように、この設定を保証レジストリキーを変更:あなたのサービスがインストールされているどのように

protected override void OnCommitted(System.Collections.IDictionary savedState) 
{ 
    base.OnCommitted(savedState); 
    string regKey = "SYSTEM\\CurrentControlSet\\Services\\MyServiceName"; 
    var key = Registry.LocalMachine.OpenSubKey(regKey, RegistryKeyPermissionCheck.ReadWriteSubTree) 
      ?? Registry.LocalMachine.CreateSubKey(regKey, RegistryKeyPermissionCheck.ReadWriteSubTree); 

// might need to check the result, should be hex 110 or Decimal 272 
key.SetValue("Type", 272, RegistryValueKind.DWord); 
}