从Windows Service执行“ netsh http add sslcert”时出现错误1312

时间:2019-03-08 09:11:07

标签: c# windows-services netsh windows-users

我有一个Windows服务,该服务带有使用HTTPS和证书的自托管WCF REST服务。如果我配置证书以管理员权限手动运行msdos shell并执行命令“ netsh http add sslcert ....”,则一切正常。如果我在Windows Form应用程序中使用以下代码执行命令,一切也将正常工作:

string arguments = String.Format("http add sslcert ipport={0}:{1} certstorename=MY certhash={2} appid={3}", ipAddress, tcpPort, Constants.CERTIFICATE_THUMBPRINT, guid);
var configProc = new ProcessStartInfo
{
    WindowStyle = ProcessWindowStyle.Hidden,
    CreateNoWindow = true,
    RedirectStandardOutput = true,
    UseShellExecute = false,
    WorkingDirectory = @"C:\Windows\System32",
    FileName = @"C:\Windows\System32\netsh.exe",
    Verb = "runas",
    Arguments = arguments
};

Process p = Process.Start(configProc);

与Windows服务完全相同的代码会产生错误1312“指定的登录会话不存在。它可能已经终止。”

两种情况之间唯一的显着区别是Windows用户执行代码:在不起作用的情况下(Windows服务)是LocalSystem。在可行的情况下,是具有管理员权限的普通用户。

仅提供给您完整的肖像:我需要以编程方式绑定/取消绑定证书,因为我需要使IP地址和端口可配置:可以停止该服务,更改侦听ip和端口,然后再次启动。当服务停止时,我将解除绑定证书,并在再次启动该服务时将其重新绑定到新的IP和端口上。

非常感谢您。

0 个答案:

没有答案