如何使用vb6在服务器上远程运行客户端的exe

时间:2012-11-22 15:16:11

标签: vb6 cmd exe remote-access

我正在使用下面的代码在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. 如何在我的电脑上完成后关闭窗口和处理?

2 个答案:

答案 0 :(得分:3)

PSExec只会在计算机中启动进程(大部分时间是远程),之后它无法控制正在执行的exe。请尝试将其作为一个进程运行(在C#中的ProcessInfo中)(shell执行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 希望它有所帮助

答案 1 :(得分:3)

这个怎么样?

  1. 在服务器上安装Windbg。
  2. 当你的exe准备运行时,
  3. 配置windbg自动附加到你的exe。 http://ask.brothersoft.com/image-file-execution-options-debugger-83827.html
  4. 运行脚本
  5. 在你的exe开始之后
  6. ,windbg将附加到它上面。
  7. 在windbg命令中输入'g',让你的exe运行。
  8. 等到你认为它应该完成
  9. ctrl-break让进程挂起
  10. 输入'〜* kb'到windbg命令,看看每个帖子里发生了什么, 找出他们为什么等待,以及他们在等什么?
相关问题