Windowsサービスを作成しようとしていますが、インストールしようとすると、ロールバックして次のエラーが表示されます。
System.Security.SecurityException:ソースは見つかりませんでしたが、一部またはすべてのイベントログを検索できませんでした。アクセスできないログ:セキュリティ。
私はこれが何を意味するのか分かりません-私は最初に物事をテストしているだけなので、私のアプリケーションは最小限です。
私のインストーラーコード:
namespace WindowsService1
{
[RunInstaller(true)]
public partial class ProjectInstaller : System.Configuration.Install.Installer
{
public ProjectInstaller()
{
//set the privileges
processInstaller.Account = ServiceAccount.LocalSystem;
processInstaller.Username = null;
processInstaller.Password = null;
serviceInstaller.DisplayName = "My Service";
serviceInstaller.StartType = ServiceStartMode.Manual;
//must be the same as what was set in Program's constructor
serviceInstaller.ServiceName = "My Service";
this.Installers.Add(processInstaller);
this.Installers.Add(serviceInstaller);
}
private void serviceProcessInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
}
private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
}
}
}
私のサービスコード:
public partial class Service1 : ServiceBase
{
public Service1()
{
this.ServiceName = "My Service";
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
}
protected override void OnStop()
{
base.OnStop();
}
}
ユーザー名とパスワードの入力を求められている場合は、どこかでAccount = ServiceAccount.User
-それが起こる可能性がある(すべき)唯一の方法です。おそらく、上記のコメント内のコードは実行されていないか、後でコードを実行することで元に戻されています。
2番目の段落に関しては、一般的に、コンソールで表示したり、タスクとして実行したりしたくない場合、このサービスは問題ないと思います。 ASP.NETとして実行し、データベースを表示できないようにすることについての部分を理解しているかどうかはわかりません...
最後に、最後の段落で、インストーラーのコードで何が行われているかを詳しく知ることなく、NullExeceptionについて話すことはできません。
Windows 7で installutil を使用しているときにコマンドラインからサービスをインストールしようとすると、同じ例外が発生しました。解決策は、管理者としてコマンドラインを開き、installutilを実行することでした。
また、 TopShelf のようなフレームワークを使用してサービスをホストする方が簡単な場合もあります。これは、サービスの名前と説明から復旧方法まで、すべての setup configuration を管理するためですプロセスが動作します。また、デバッグ中にIDE=の中からサービスを簡単に開始できます。
管理者としてコマンドプロンプトを実行します。それはあなたの問題を解決します
これは、プログラマが見逃している非常に一般的な問題です
管理者権限でVS2013開発者コンソールを開くことにより、この同じ問題を解決します。
おそらくサービスをインストールしようとしている
具体的には、この場合の問題は、サービスのインストール中にいくつかのEventLogレジストリキーが作成されることです。
これを修正する1つの方法は、管理者モードでコマンドプロンプトを実行していることを確認することです(右クリック>管理者として実行)
また、一部のレジストリキーが管理者アカウントの「フルコントロール」権限を持たないために、この方法でSecurityException問題を解決できない場合もあります。
サービスがEventLogに書き込めるようにするには、次のキーに管理者用の「フルコントロール」を設定する必要があります。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application
これは次の方法で実行できます。