3

以下のコードを使用して、cmd でコマンドを実行しています。これは実際に私のサーバーでexeを実行するために作られています。

Private Sub Command1_Click()
    Dim FN As Integer
    FN = FreeFile
    'DOS COMMANDS
    ServerName = "\\mydbserv"
    ExePath = """d:\myfolder\my.exe"""
    UserName = "myserver\myuser"
    Password = "mypass"
    MyCommand = "psexec " & ServerName & " -u " & UserName & " -p " & Password & " -i " & ExePath
    'Open Bat file
    Open "C:\Mybatc.bat" For Output As #FN
        Print #FN, "cd c:\Users\myuser"
        Print #FN, MyCommand
        Print #FN, "Exit"
    Close #FN
    'Activate
    result = Shell("C:\Mybatc.bat", vbHide)
    End
End Sub

プロセスが完了したときにcmdが閉じられないことがわかるまで、すべて問題ありませんでした。さらに悪いことに、リモートで実行しようとしていたexeも停止しません。CPU使用率を確認すると、常に「00」と表示され、起動すらしません..これまでに動作しているように見えますが、実際には動作しません。だから私の質問は:

  1. このexeファイルをリモートで実行できないのはなぜですか? (または、実行中のように表示される理由)
  2. サーバー上でこのexeファイルを終了したら、リモートで実行して閉じるにはどうすればよいですか?
  3. 私のPCでも終了時にウィンドウとプロセスを閉じるにはどうすればよいですか?
4

2 に答える 2

3

PSExec は、コンピューター (ほとんどの場合リモート) でプロセスの開始のみを開始し、その後、実行中の exe を制御しません。プロセスとして (C# のように ProcessInfo 内で) 実行してみてください (shell execute false を使用)。また、次のようなものを使用して、リモート PC のプロセスの状態を確認できます。

Option Explicit

Private Sub Form_Load()

    Dim strComputer As String
    Dim sReturn As String
    Dim strNameOfUser As Variant
    Dim colProcesses As Object
    Dim objProcess As Object
    strComputer = "." '"." local or "\\ComputerName"
    Set colProcesses = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2").ExecQuery("Select * from Win32_Process")
    For Each objProcess In colProcesses
        sReturn = objProcess.GetOwner(strNameOfUser)
        If sReturn <> 0 Then
            MsgBox "Could not get owner info for process " & objProcess.Name & vbNewLine & "Error = " & sReturn
        Else
            MsgBox "Process " & objProcess.Name & " is owned by " & "\" & strNameOfUser & "."
        End If
    Next

End Sub

リンク : http://www.vbforums.com/showthread.php?355203-RESOLVED-How-to-get-process-information お役に立てば幸いです

于 2012-12-02T10:10:43.940 に答える
3

これはどう?

  1. サーバーに Windbg をインストールします。
  2. exe を実行する準備ができたら、windbg 自動アタッチを exe に設定します。 http://ask.brothersoft.com/image-file-execution-options-debugger-83827.html
  3. スクリプトの実行
  4. exe が開始されると、windbg がそれにアタッチされます。
  5. windbg コマンドに「g」と入力して、exe を実行します。
  6. 終了する必要があると思うまで待ちます
  7. プロセスをハングアップさせるctrl-break
  8. '~*kb' を windbg コマンドに入力して、すべてのスレッドで何が起こっているかを確認し、なぜ待機しているのか、何を待機しているのかを調べます。
于 2012-12-03T16:22:41.887 に答える