【问题标题】:Programatically allowing Windows service to decrypt config file以编程方式允许 Windows 服务解密配置文件
【发布时间】:2023-03-04 13:05:01
【问题描述】:

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

【问题讨论】:

  • 使用 string.Format 函数来避免所有的引号在这里你可以按照一个简单的例子 - stackoverflow.com/questions/13653991/…
  • @MethodMan,我已经编辑了上面的代码以反映您的建议。现在更漂亮了,但还是不行 :-) / :-(

标签: c# winforms encryption acl


【解决方案1】:

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

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

【讨论】:

  • 嗯好的,很抱歉。我想我可以重现这个问题。
  • 感谢您的努力!
猜你喜欢
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 2015-10-25
  • 2021-08-06
相关资源
最近更新 更多