【问题标题】:Visual Basic Shell Administrator?Visual Basic Shell 管理员?
【发布时间】:2015-01-09 15:35:03
【问题描述】:

如果我使用 Visual Basic 通过 Shell() 命令运行可执行文件,我将如何以管理员身份运行该可执行文件?我的方法至少在实践中有效,但一个可执行文件无法正常运行,我认为这就是问题所在。

这是我尝试运行的命令示例。

Shell("%temp%\ninite.exe")

编辑:对不起,这是 VB.net,不是 VBA。我在那里贴了一个坏标签。

【问题讨论】:

  • 很难猜测“不正确”可能意味着什么。遗留的 Shell() 函数根本不做任何事情来确保进程以管理员权限运行。这需要使用 Process 类,runas 动词。
  • 问题是您需要以管理员身份运行Shell 还是只运行.exe
  • 这可能会有所帮助:如果我以管理员身份运行我的应用程序,一切正常。但我希望此代码能够为不熟悉计算机且可能无法以管理员身份运行我的应用程序的人运行。
  • 我所说的“不正确”是指一点也不。找不到文件,即使它在那里。

标签: vb.net windows shell visual-studio-2013 administrator


【解决方案1】:

要严格保持在没有 .NET 依赖项的 VBA 中,您应该能够使用 ShellExecute Win32 函数。

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal hWnd As Long, _
        ByVal lpOperation As String, 
        ByVal lpFile As String, _
        ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) As Long 

您可以将“runas”传递给 lpOperation,而不是更常见的“open”(通常称为动词)。请注意,这可能会导致出现一个对话框,提示用户输入凭据。

更好的方法可能是使用 CreateProcessCreateProcessAsUser 函数,这可能是在 Windows 中启动任何东西的最强大的方法,但这肯定更复杂,我无法告诉你如何获取它的详细信息正常工作。

【讨论】:

    猜你喜欢
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多