以管理员身份运行另一个程序

7
所以我尝试在谷歌上搜索,但是没有得到好的结果。我的目标是以管理员身份运行另一个程序,而不会每次都弹出烦人的UAC提示。
思路是这样的:该程序需要管理员权限才能运行,用户将授予这些权限。然后该程序将运行许多其他需要管理员权限的程序。与其让用户一遍又一遍地点击并允许许多程序,具有管理员权限的程序可以作为管理员运行其他程序,因为它本身就有这些权限。
这将为用户节省跟随太多指示的时间。此外,要求用户允许许多事情看起来非常不专业。这只是一个一键式程序,可以完成所有操作。
我说谷歌没有得到好的结果的原因是因为该页面被淹没了如何将程序作为管理员运行的信息。我想以管理员身份运行另一个程序。
我考虑把安装文件放在一个文件夹中,然后从CMD以管理员身份运行文件,但这需要我使用runas。经过测试,它一直显示密码/用户名错误,但我确定它是正确的。
还有其他建议吗?

看看这个链接是否有帮助:http://www.mztools.com/articles/2009/MZ2009007.aspx。另一个有趣的链接可能是这个:http://www.codeproject.com/Articles/17968/Making-Your-Application-UAC-Aware。第一个链接看起来像是你的答案。第二个链接可能会让事情变得更容易,并且解释了UAC的发生情况。 - Erik Nedwidek
如果你需要进一步了解,这是我的谷歌技巧:process.start vb.net uac - Erik Nedwidek
1
如果您的进程正在以管理员身份运行,则它直接启动的任何进程也将以管理员身份运行。那么,您的问题到底是什么? - Harry Johnston
1个回答

19

你可以使用以下方法从你的应用程序中启动另一个应用程序:

Process.Start("Notepad.exe")
如果您的原始程序正在以管理员身份运行,则记事本将以管理员身份运行(不会有UAC提示)。
如果您的原始程序以管理员身份运行,并且您想要以管理员身份启动应用程序,您需要执行以下操作(这将提示进行提升):
    Dim procStartInfo As New ProcessStartInfo
    Dim procExecuting As New Process

    With procStartInfo
        .UseShellExecute = True
        .FileName = "Notepad.exe"
        .WindowStyle = ProcessWindowStyle.Normal
        .Verb = "runas" 'add this to prompt for elevation
    End With

    procExecuting = Process.Start(procStartInfo)

请注意,无法绕过用户账户控制提示。如果用户账户控制已启用,则用户必须在某个时刻同意提升权限。


1
我用CMD测试了一下,结果完美无缺!我真的不知道你可以启动一个应用程序并且权限会直接转移过去!我甚至制作了一个单独的应用程序来告诉它是否正在以管理员身份运行。它运行得非常完美!再次感谢! - Steve Laster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接