2

NLogを使用したいWindowsサービスを作成しています。サービスのインストール場所にログを書き込んで、次のようにします。

PathToInstalledService\Logs\MyLog.txt

もちろん、これには管理者の特権が必要になります。したがって、私の質問は、サービスのインストールを作成するときに、ServiceProcessInstallerでどのアカウントを使用する必要があるかということです。現在LocalServiceを使用していますが、このアカウントには必要な標高がありません。

ありがとう。

4

1 に答える 1

6

インストール中に、「ログ」ディレクトリの権限を変更して、サービス アカウントがファイルを書き込めるようにする必要があります。サービス機能を実行するために必要な最小限の権限を持つアカウント (通常は NETWORK SERVICE アカウント) を使用します。

これは、サービスのインストール クラスから実行できます。

    void Installer1_AfterInstall(object sender, InstallEventArgs e)
    {
        string myAssembly = Path.GetFullPath(this.Context.Parameters["assemblypath"]);
        string logPath = Path.Combine(Path.GetDirectoryName(myAssembly), "Logs");
        Directory.CreateDirectory(logPath);
        ReplacePermissions(logPath, WellKnownSidType.NetworkServiceSid, FileSystemRights.FullControl);
    }

    static void ReplacePermissions(string filepath, WellKnownSidType sidType, FileSystemRights allow)
    {
        FileSecurity sec = File.GetAccessControl(filepath);
        SecurityIdentifier sid = new SecurityIdentifier(sidType, null);
        sec.PurgeAccessRules(sid); //remove existing
        sec.AddAccessRule(new FileSystemAccessRule(sid, allow, AccessControlType.Allow));
        File.SetAccessControl(filepath, sec);
    }
于 2009-10-14T16:43:51.177 に答える