Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过编程允许Windows服务解密配置文件_C#_Winforms_Encryption_Acl - Fatal编程技术网

C# 通过编程允许Windows服务解密配置文件

C# 通过编程允许Windows服务解密配置文件,c#,winforms,encryption,acl,C#,Winforms,Encryption,Acl,我有一个Windows服务需要解密配置文件,我在同一台计算机上加密了配置文件。(它不需要是可导出的。)我一直在努力克服ol“无法打开RSA密钥容器”错误。我可以手动执行此操作: c:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE" 但我需要按程序完成这项工作。基于两篇文章(一篇来自,另一篇来自

我有一个Windows服务需要解密配置文件,我在同一台计算机上加密了配置文件。(它不需要是可导出的。)我一直在努力克服ol“无法打开RSA密钥容器”错误。我可以手动执行此操作:

c:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
但我需要按程序完成这项工作。基于两篇文章(一篇来自,另一篇来自),我尝试了以下方法:

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服务尝试读取配置文件时,我仍然会遇到相同的错误。我做错了什么?

我认为您只需要一个具有管理员权限的用户就可以运行Windows服务。我猜您应该在提升的命令提示符下运行该命令,因为这是使其工作的唯一方法


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

使用string.Format函数避免所有引号,这里有一个简单的示例-@MethodMan,我编辑了上面的代码以反映您的建议。现在更漂亮了,但仍然不起作用:-)好吧,很抱歉。我想我可以重现这个问题。谢谢你的努力!