コンテクスト
Windows200864ビット。
インストーラーとして機能する.NETサービスをインストールしています。
バックグラウンド
私はこのコード(クレジット:Marc Gravell)を使用してサービスをインストールしています:
using (var inst = new AssemblyInstaller(typeof(MyNamespace.Program).Assembly, new string[] { })) {
IDictionary state = new Hashtable();
inst.UseNewContext = true;
try {
if (uninstall) {
inst.Uninstall(state);
} else {
inst.Install(state);
inst.Commit(state);
}
} catch {
try {
inst.Rollback(state);
} catch { }
throw;
}
}
問題
すべて正常に動作し、例外はありませんが、その直後に、次のコードを実行して、インストールしたばかりのサービスを開始しようとしています。
using (var sc = new ServiceController("the service's name"))
{
sc.Start();
sc.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(20));
}
そして、私は例外を受け取ります:
System.InvalidOperationException:サービス[サービス名はここにあります]がコンピューター'。'で見つかりませんでした。---> System.ComponentModel.Win32Exception:指定されたサービスはインストールされたサービスとして存在しません ---内部例外スタックトレースの終わり--- System.ServiceProcess.ServiceController.GenerateNames()で System.ServiceProcess.ServiceController.get_ServiceName()で System.ServiceProcess.ServiceController.Start(String [] args)で System.ServiceProcess.ServiceController.Start()で at ...(私のコードの詳細)
理由がわかりません。理由は次のとおりです。
ServiceInstaller
サービスの名前は、 (ServiceName
プロパティ内の)とまったく同じです。- コードは、ローカルシステムアカウントで実行される別のサービス内で実行され ます。