我想将证书绑定到端口 0.0.0.0:443 作为我已创建的此证书的参数:
ICertificateBindingConfiguration config = new CertificateBindingConfiguration();
var ipPort = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 443);
var certificateThumbprint = serverCert.X509Certificate.Thumbprint.ToLower();
var appId = Guid.Parse("2f6580e5-a11a-4350-8cc0-47e5e0ac33e6");
但是当我执行这段代码时:
config.Bind(new CertificateBinding(certificateThumbprint, StoreName.My, ipPort, appId));
我收到错误:
System.ComponentModel.Win32Exception(0x80004005): Access is denied ...
我在执行它的机器中不是本地管理员。我如何通过以管理员身份执行它来解决此问题?
答案 0 :(得分:1)
这是因为您的计算机没有管理员权限。你需要确定你有。要检查您是否拥有管理员权限,可以使用以下代码示例:
static bool IsElevated => new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);
您可以创建一个示例C#控制台应用程序并使用上面的代码行。
您需要使用以下代码行:using System.Security.Principal;
如果它工作,那么最好在另一个.exe文件中运行此功能,并创建一个类似下面方法的方法来执行它作为管理员:
public static int RunProcessAsAdmin(string exeName, string parameters)
{
try {
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = CurrentDirectory;
startInfo.FileName = Path.Combine(CurrentDirectory, exeName);
startInfo.Verb = "runas";
//MLHIDE
startInfo.Arguments = parameters;
startInfo.ErrorDialog = true;
Process process = System.Diagnostics.Process.Start(startInfo);
process.WaitForExit();
return process.ExitCode;
} catch (Win32Exception ex) {
WriteLog(ex);
switch (ex.NativeErrorCode) {
case 1223:
return ex.NativeErrorCode;
default:
return ErrorReturnInteger;
}
} catch (Exception ex) {
WriteLog(ex);
return ErrorReturnInteger;
}
}