当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

.NET-要求用户使用与VS Debugger相同的管理权限重新启动应用程序

admin 76℃
我正在开发一个使用传统USB驱动程序的应用程序。出于某种原因,遗留USB驱动程序的开发人员决定将信息写入注册表,此过程要求我对应用程序具有管理权限。

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

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

您可以使用 ProcessStartInfo 键入并设置 Verb 属性设置为'runas'。

var info = new ProcessStartInfo();
info.UseShellExecute = true;
info.Verb = "runas";
// set the rest of the information
Process.Start(info);

这将用标准的windows对话框提示用户运行管理代码。

visual studio不会以管理员身份重新启动自己,它只是检测它是否以管理员身份运行,如果不是,则会显示一个消息框。对你来说最简单的测试就是 IsInRole -即使您在administrators组中,如果应用程序运行的是非提升的,它也会返回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)并关闭这个实例。

转载请注明:我的代码 » .NET-要求用户使用与VS Debugger相同的管理权限重新启动应用程序