我正在开发使用传统USB驱动程序的应用程序。由于某种原因,传统USB驱动程序的开发人员决定将信息写入注册表,此过程要求我拥有应用程序的管理权限。
现在,使用注册表的USB功能应该只由用户完成一次,或者当他想重新校准他的设备时,我不需要一直享有管理权限。
如果要调试需要Visual Studio管理权限的应用程序,则会弹出一个请求,使用正确的凭据重新启动应用程序。我怎么能自己做?我想正常启动我的应用程序,但是当用户进入校准菜单时,我想给他一个类似的弹出窗口,告诉他对于这个选项,他必须以管理权限重新启动应用程序。
答案 0 :(得分:3)
您可以使用ProcessStartInfo
类型并将Verb
属性设置为“runas”来让程序启动管理员权限。
var info = new ProcessStartInfo();
info.UseShellExecute = true;
info.Verb = "runas";
// set the rest of the information
Process.Start(info);
这将提示用户使用标准Windows对话框运行管理代码。
答案 1 :(得分:3)
Visual Studio不会以管理员身份重新启动,只会检测它是否以管理员身份运行,如果没有,则会显示一个消息框。最简单的测试是调用IsInRole
- 即使您在管理员组中,如果应用程序运行非提升,则返回false。例如:
WindowsIdentity wi = WindowsIdentity.GetCurrent();
WindowsPrincipal wp = new WindowsPrincipal(wi);
if (wp.IsInRole("Administrators"))
{
MessageBox.Show("Yes, you are an Administrator.", "Is Administrator?", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("No, you are not an Administrator.", "Is Administrator?", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
而不是这些消息框,你可以自己说“请关闭并重启我”。或者如果你想炫耀,给他们一个按钮来点击它将启动一个提升的实例(使用ProcessStart和runas)并关闭这个。