要求用户使用VS调试器等管理权限重新启动应用程序

时间:2010-08-25 07:28:48

标签: .net visual-studio debugging uac

我正在开发使用传统USB驱动程序的应用程序。由于某种原因,传统USB驱动程序的开发人员决定将信息写入注册表,此过程要求我拥有应用程序的管理权限。

现在,使用注册表的USB功能应该只由用户完成一次,或者当他想重新校准他的设备时,我不需要一直享有管理权限。

如果要调试需要Visual Studio管理权限的应用程序,则会弹出一个请求,使用正确的凭据重新启动应用程序。我怎么能自己做?我想正常启动我的应用程序,但是当用户进入校准菜单时,我想给他一个类似的弹出窗口,告诉他对于这个选项,他必须以管理权限重新启动应用程序。

2 个答案:

答案 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)并关闭这个。