我正试图以管理人员的身份从启动时运行我的应用程序。为此,我写了以下代码:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator))
{
Application.Run(new HomePage());
}
else
{
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = Environment.CurrentDirectory;
startInfo.FileName = Application.ExecutablePath;
startInfo.Verb = "runas";
try
{
System.Diagnostics.Process.Start(startInfo);
Application.Exit();
}
catch
{
return;
}
Application.Exit();
}
Application.Run(new HomePage());
这是我的program.cs文件。问题是当我运行它时,它附带了两个相同的应用程序。我尝试了很多方法,但都没能解决
是否可以在启动时以管理员身份运行我的应用程序,而不引发以管理员身份进行的对话?
您调用application.run两次(如果您是管理员,则一次在if内部,一次在if/else块之后),因此对于管理员,它将运行两次。
只需删除应用程序。在if/else之后运行,或者反转你的if-else,说如果不是管理员(你目前在else中有什么),不要放一个else,让应用程序在最后运行,只有当你不是管理员时才会命中
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
// If you're an administrator
if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator))
{
// Then run the application (first time)
Application.Run(new HomePage());
}
else
{
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = Environment.CurrentDirectory;
startInfo.FileName = Application.ExecutablePath;
startInfo.Verb = "runas";
try
{
System.Diagnostics.Process.Start(startInfo);
Application.Exit();
}
catch
{
return;
}
Application.Exit();
}
// you end up here after it ran as an admin, skipping the else and you tell it to run again, either remove that line or invert your condition
Application.Run(new HomePage());