2012-11-22 97 views
3

我正在使用下面的代碼在cmd中執行我的命令。這實際上是爲了在我的服務器上運行一個exe。如何在客戶端使用vb6遠程運行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. 如何在我的電腦上完成後關閉窗口和進程?
+0

僅僅因爲它使用0%的CPU,並不意味着它「甚至沒有啓動」。從命令提示符運行批處理文件時它工作嗎? 'my.exe'可能正在等待一些輸入,等等。 – Deanna

+0

@Deanna當我手動啓動exe時,啓動時間不到1秒,但是當我使用psexec進行操作時,它甚至沒有顯示窗體,所以它等待什麼我不知道,但我希望它執行正確的時間,它可能需要超過1秒沒有問題,但它不應該需要幾個小時才能開始..只顯示有一個錯誤的地方.. –

+0

@BerkerYüceer:當你開始時會發生什麼命令提示符下的psexec命令? (而不是從vb內)你會得到任何結果或錯誤信息? ...也許你的psexec命令的語法不正確? – Hrqls

回答

3

這個怎麼樣?

  1. 在服務器上安裝Windbg。
  2. 配置windbg自動附加到您的exe文件,當您的exe文件準備運行時。 http://ask.brothersoft.com/image-file-execution-options-debugger-83827.html
  3. 運行你的腳本
  4. 你的exe文件啓動後,windbg會附加到它。
  5. 在windbg命令中輸入'g',讓你的exe運行。
  6. 等待,直到你認爲它應該完成
  7. CTRL-休息時間可讓程序掛在
  8. 輸入「〜* KB」到WinDbg的命令,看看發生了什麼事情在每一個線程, 找出他們爲什麼正在等待,還有他們在等什麼?
+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

問題是我已經可以看到什麼進程運行,但它並沒有實際運行..但仍然這是smt很好知道。 +1 –