VBA:运行“提升”命令(Shell 与 ShellExecute)

Posted

技术标签:

【中文标题】VBA:运行“提升”命令(Shell 与 ShellExecute)【英文标题】:VBA: Running "Elevated" Command (Shell vs. ShellExecute) 【发布时间】:2014-09-04 16:31:42 【问题描述】:

在我的 VBA 程序中,我需要运行应用程序“Skitch”并使用它打开一个 JPEG 文件。这是我一直在使用的命令:

ReturnValue = Shell("C:\Program Files (x86)\Evernote\Skitch\Skitch.exe " & """" & aPic & """", 1)

...其中“aPic”是路径和文件名。

经过一些试验,我认为我需要像在提升的命令窗口中一样运行该命令(换句话说,以“管理员身份”运行它)。是否可以运行提升的 Shell?

如果那不可能:如果我理解正确,使用 ShellExecute 而不是 Shell 将自动提升命令。但我对它不太熟悉。有人可以告诉我如何使用 ShellExecute 运行我的命令吗? (顺便说一句,我知道 ShellExecute 适合运行与文件类型相关的命令,但在此用户的计算机上 *.jpg 可能不会与 Skitch 相关联。)

谢谢。

【问题讨论】:

【参考方案1】:

试试这个:

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

Const SW_SHOWNORMAL = 1

Public Sub test()

  ShellExecute 0, "runas", "C:\Program Files (x86)\Evernote\Skitch\Skitch.exe", aPic, vbNullString, SW_SHOWNORMAL

End Sub

我没有skitch,所以不能尝试这个,但它应该可以。

有关ShellExecute、click here 的更多信息,请查看 MSDN。

【讨论】:

我能够使用此方法调用 REG.EXE 来添加(修改)通常需要管理员权限的注册表项。这将提示提升权限,这是我希望用户仅在一项操作中看到的内容(为 ODBC 切换 TraceSQLMode)。示例:strParameters = """HKLM\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ODBC""" ; strParameters = "ADD " & strParameters & " /v TraceSQLMode /t REG_DWORD /d " & varValue & " /f" ; ShellExecute 0, "runas", "REG.EXE", strParameters, vbNullString, 0

以上是关于VBA:运行“提升”命令(Shell 与 ShellExecute)的主要内容,如果未能解决你的问题,请参考以下文章

linuxe的基础指令

Shell 退出代码与简单命令不一致

vbscript 在VBA中运行Shell命令

运行命令但留在 shell vs exit

shell编程基础

shell和shell脚本 有啥区别啊