12

私はこの問題を解決しようとしてきましたが、問題の解決策がどこにも見つからないようです。最初の部分は次のとおりです。VBA シェル コマンドは常に「ファイルが見つかりません」を返すその質問では、何らかの奇妙な理由 (おそらくセキュリティ設定) により、%APPDATA% フォルダーでアプリケーションが見つかりませんでした。

それ以来、正しく動作することを少し期待して、インポートツールをデータベースを保存しているのと同じディレクトリに移動しました。

私の目的は、MS Access のボタンをクリックして、インポート ツールを直接実行することです。現在、ツールを保持しているフォルダーを開いています。これは、管理者権限を持つ私の開発マシンでは機能しますが、管理者権限のない他のマシンでは機能しません。現在のコードは次のようになります。

Dim hProcess as Long
Dim myPath as String
Dim ex as String

ex = "C:\WINDOWS\explorer.exe "
myPath = Environ("ProgramFiles(x86)") & "\mytool\"

hProcess = Shell(ex & myPath, vbNormalFocus)

これにより、ファイルを保持するフォルダーを開くことができますが、完全な管理者権限を持つコンピューター アカウントでのみ可能です。これを完全な権限を持たないマシン アカウントで実行すると、何も実行されません。

私も次のことを試しました:

Dim hProcess As Long
Dim myPath as String

myPath = Environ("ProgramFiles(x86)") & "\mytool\mytool.exe"
hProcess = Shell(myPath, vbNormalFocus)

このセクションは、プロセス マネージャーを見るとアプリケーション「mytool.exe」をロードするという点で「機能しているように見えます」。ただし、数秒後 (おそらく 20 秒) に、アプリケーション「mytool.exe」が動作を停止したことを示すダイアログがポップアップ表示されます。

ここで注意すべきことの 1 つは、開発マシンでは管理者権限を持っていますが、ホーム マシンではすべての権限を持っていることです。私のホーム マシンでは、この 2 番目のコードは問題なく動作します。私の開発マシンではクラッシュしますが、制限されたユーザー マシンでは何もしません。

管理者未満の権限を使用して MS Access からこのアプリケーションを開く方法について何か提案はありますか? アプリケーションを直接実行するか、少なくともそのアプリケーションが存在するフォルダーを開きます。

ありがとう!

PSスタックオーバーフローで見つかったShellAndWaitとRunApplicationの両方のコードを試しましたが、どちらもこのインスタンスでは機能しません。

4

4 に答える 4

5

ShellExecuteVBA で何かを実行する必要があるときは、常に Windows API から使用します。
私の知る限り、完全な権限のないマシンでも動作します。

例:

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 lpnShowCmd As Long) As Long


Public Sub ShellEx(ByVal Path As String, Optional ByVal Parameters As String, Optional ByVal HideWindow As Boolean)

    If Dir(Path) > "" Then
        ShellExecute 0, "open", Path, Parameters, "", IIf(HideWindow, 0, 1)
    End If

End Sub

ShellExこれで、ほとんど何でも実行するために呼び出すことができます:

'run executable
ShellEx "c:\mytool.exe"

'open file with default app
ShellEx "c:\someimage.jpg"

'open explorer window
ShellEx "c:\"

ShellEx2 つのオプション パラメータもあることに注意してください。
上記の例ではこれを示していませんが、次のことができます。

  • パラメータを実行可能ファイルに渡す
  • 呼び出された実行可能ファイルのウィンドウを非表示にします
于 2013-12-07T12:16:58.133 に答える
1

http://www.mombu.com/microsoft/scripting-wsh/t-vista-uac-problem-with-wscriptshell-run-method-1508617.htmlをいじるだけです。Windows 7 の家庭用 PC で試してみました。

Set objShell = CreateObject("Shell.Application")
myPath = Environ("ProgramFiles(x86)") & "\mytool"
Set objFolder = objShell.Namespace(myPath)
Set objFolderItem = objFolder.ParseName("mytool.exe")
objFolderItem.InvokeVerb "runas"

それはあなたにいくつかのアイデアを与えるかもしれません。

于 2012-05-17T18:59:50.010 に答える
0

小切手

Shell szFileName, vbNormalFocus

他の実行可能ファイルと一緒に。ツールに問題がある可能性があります。

于 2012-05-21T07:38:20.640 に答える