【问题标题】:Automatically running a program as administrator in VB.NET在 VB.NET 中以管理员身份自动运行程序
【发布时间】:2011-12-26 00:50:01
【问题描述】:

我正在开发一个基于 VB.NET 的应用程序,它需要管理权限才能正常运行。但是,我在网上浏览了几个教程,都提到了如何使用 mainifest 文件来做到这一点。这种技术的问题在于,每当打开程序时,我都需要输入管理员密码,但我希望这会自动发生。 (用户不要输入管理员密码,密码必须从代码级别输入)

以下代码是我能找到的最接近的代码,但它也不能满足我的问题,

Dim securePass As New Security.SecureString()
Dim pass As String = "password"

For Each c As Char In pass
    securePass.AppendChar(c)
Next

' If there isn't a domain, set the argument to 'Nothing', as demonstrated below.
Process.Start("testsoftware\WinKBSel\WinKBSel1003.exe", "username", pass, Nothing)

谁能告诉我如何在不要求用户输入管理员密码的情况下做到这一点?

【问题讨论】:

    标签: windows vb.net windows-7 administrator


    【解决方案1】:

    如果您有一个在管理员帐户下运行的后端服务,您的应用程序可以使用该服务以提升的权限执行所需的操作,您可能最好将应用程序拆分。 UAC 旨在保护用户免受他们自己的伤害,您可以通过添加后端服务来绕过它......但要非常小心以这种方式打开漏洞,因为它们可能会被其他应用程序/病毒利用。在应用程序中存储管理员密码总是一个坏主意,因为应用程序可能会被反编译并提取密码。

    【讨论】:

    • 好的,基本上通过创建一个单独的用户帐户,它只有我需要的权限,并通过使用这个后端服务,可以自动以该用户身份登录程序。能否请您告诉我一些后端服务工具
    • 在 c#msdn.microsoft.com/en-us/library/aa984464(v=vs.71).aspx 中编写一个 windows 服务,然后在你的前端应用程序和你的服务之间建立一些通信链接(TCP/WCF/命名管道,任何你想要的)。您需要管理员权限才能执行该服务的第一次安装,但之后如果您安装 svc 以在管理员帐户下运行,您将拥有尽可能多的访问权限。
    【解决方案2】:

    除非用户名/密码已知,否则您无法创建会自动以用户身份登录的程序。

    这意味着您要么被限制在您的应用已经知道凭据的系统上运行,您的用户必须将凭据输入到您的应用中,或者您的用户必须使用 Windows 中的“运行方式”功能才能使用正确的用户。

    如果您的提议实际上是可行的,那么它将代表一个巨大 安全漏洞:您可以以任何用户身份运行任何代码,而无需首先进行身份验证。这可不是什么好事!

    这样想:如果你被卖了一个程序,它会自动以管理员身份登录即使没有你的许可,你会有什么感觉?

    【讨论】:

      【解决方案3】:

      UAC 的设计使您无法为所欲为。 UAC 确保为了提升用户必须通过 UAC 对话(管理员同意对话或肩上对话)。您需要根据 UAC 的实际情况调整您的期望。

      【讨论】:

        【解决方案4】:

        此操作不需要代码,UAC 已生成,因此您可以在未经用户许可的情况下自动登录。您可以做的是使用清单并更改启动,以便在应用程序启动时以管理员身份运行并请求许可!更改清单。查一下!

        【讨论】:

        • 更改清单是 Yoosuf 已经做过的事情。问题是“没有用户输入管理员密码怎么会发生这种情况”,而您的回答根本没有解决这个问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-18
        • 2011-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-10
        • 2017-08-23
        相关资源
        最近更新 更多