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

如何使用vb6在服务器上通过客户端远程运行exe,vb6,cmd,exe,remote-access,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"

我使用下面的代码在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甚至没有启动。。它显示出你喜欢永远工作,但实际上从未工作过。 所以我的问题是:

为什么我不能远程运行这个exe文件?或者为什么它只是表现得像跑步 在服务器上完成此exe文件后,如何远程运行和关闭? 在电脑上完成后,如何关闭窗口并进行处理?
PSExec在大多数时间只会在远程计算机中启动进程,之后它对正在执行的exe没有控制权。请尝试将其作为ProcessInfo中的进程运行,如在Cwith 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
链接: 希望能有所帮助,这个怎么样

在服务器上安装Windbg。 当您的exe准备运行时,配置windbg自动附加到您的exe。 运行脚本 启动exe后,windbg将连接到它。 在windbg命令中输入“g”,让您的exe运行。 等到你认为应该完成的时候 ctrl-break使进程挂起 在windbg命令中输入“~*kb”,查看每个线程中发生的情况, 找出他们为什么在等待,以及他们在等待什么?
仅仅因为它使用了0%的CPU,并不意味着它甚至不能启动。当您从命令提示符运行批处理文件时,它是否工作?my.exe可能正在等待一些输入,等等@Deanna当我手动启动exe时,启动时间不到1秒,但当我使用psexec执行时,它甚至不会显示表单,所以它一直在等待什么我不知道,但我希望它能及时执行。它可能需要1秒以上。这没问题,但启动不应该需要几个小时。。这只表明某个地方有错误。@BerkerYüceer:从命令提示符启动psexec命令时会发生什么?不是从vb内部,您是否得到任何结果或错误消息。。。也许你的psexec命令语法不正确?@BerkerYüceer:这也是我的想法。手动登录远程系统时my.exe是否运行?我不知道psexec,但快速查看了psexec手册:。。。。您可能想尝试-d选项?psexec中有一个bug,当cmd调用所有不同的函数时,它会正确重定向。在远程计算机上启动进程的选项很少:1。-它不能在本地主机2上运行。WMIC-当主机和用户/密码为2时,也不能在本地主机上使用。Schtasks问题是我已经可以看到什么进程在运行,但实际上它并没有运行。。但这仍然是smt的好消息+1.