我正在使用下面的代码在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”甚至没有启动..它显示为工作永远但从未实际工作。 所以我的问题是:
答案 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)
这个怎么样?