1. ホーム
  2. c#

[解決済み] System.Security.SecurityException。ソースは見つかりませんでしたが、一部またはすべてのイベントログを検索することができませんでした。ログにアクセスできません。セキュリティ

2022-02-15 16:33:14

質問

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についてですが、インストーラのコードで何が起こっているのか、もっと詳しく知らなければお話しできません。