我有一个需要UAC提升的应用程序。
我有允许我给出的代码,但是应用程序打开了两次..这就是问题。
所以这是Form1中的代码:
public Form1() { InitializeComponent(); WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator); if (!hasAdministrativeRight) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.UseShellExecute = true; startInfo.WorkingDirectory = Environment.CurrentDirectory; startInfo.FileName = Application.ExecutablePath; startInfo.Verb = "runas"; try { Process p = Process.Start(startInfo); } catch (System.ComponentModel.Win32Exception ex) { return; } } }
这是代码programs.cs
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); }
在调试时,我发现它首先执行
进程p = Process.Start(startInfo);
这将打开应用程序UAC高程对话框,然后打开应用程序
但是接下来
Application.Run(新Form1());
在main()中,然后再次打开应用程序。
我不希望它再次打开应用程序…
我是新来的人,我在做错什么吗,一旦打开UAC,就需要关闭它。
谢谢
您无需进行任何干预即可确保应用程序始终以提升的特权运行。您可以简单地添加一个应用程序清单,该清单指示Windows在提升状态下运行您的应用程序,并且无需编写任何代码即可显示UAC提示符。
有一个相关的问题,答案也描述了如何在此处添加清单:如何使用VS2008将应用程序清单嵌入到应用程序中?