以编程方式允许Windows服务解密配置文件

时间:2015-08-19 15:55:02

标签: c# winforms encryption acl

我有一个需要解密配置文件的Windows服务,我在同一台计算机上加密了该配置文件。 (它不需要出口。)我一直在努力克服这种情况。 " RSA密钥容器无法打开"错误。我能够手动完成:

c:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"

但我需要以编程方式完成此操作。基于两个帖子(一个来自SO,另一个来自CodeProject),我尝试了这个:

private void GrantAccessToDecryptConfigFile()
{
    // programatically execute this command:
    //      c:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"

    string command = "-pa";
    string keyName = "NetFrameworkConfigurationKey";
    string userName = @"NT AUTHORITY\NETWORK SERVICE";
    string arguments = string.Format("{0} \"{1}\" \"{2}\"", command, keyName, userName);

    var psi = new ProcessStartInfo(@"C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe")
    {
        Arguments = arguments,
        UseShellExecute = false,
        CreateNoWindow = true
    };
    Process.Start(psi);
}

...但是当Windows服务尝试读取配置文件时,我仍然遇到同样的错误。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为您需要的是具有管理员权限的用户来运行Windows服务。我猜你在一个提升的命令提示符上运行该命令,因为这是我能使它工作的唯一方法。

同样当我尝试在Visual Studio上运行它时,我得到了同样的错误。我以“以管理员身份运行”启动了Visual Studio,并且成功了。