2012-11-30 59 views
0

我已經閱讀了StackOverflow中有關重定向輸出/應用程序中的錯誤 的幾個問題,但它無法幫助我。控制檯應用程序輸出未顯示

我開發了一個C#代碼的可執行文件。它從系統註冊表 恢復軟件並調用web服務將其保存到我們的數據庫。

我們正在與

Console.WriteLine( 「從可執行消息」)打印消息的可執行內部;

在另一方面,我們有一個CRM應用程序,我已經寫了兩次奪冠形成 調用與所需的參數psexec.exe這.EXE是遠程 複製目標機器上啓動。

如果您使用的是CMD.EXE參數直接PSEXEC電話,我們可以看到PSEXEC 執行橫幅和我們的可執行輸出

喜歡的東西:

PSEXEC v1.98 - 執行過程遠程

版權(C)2001-2010

標記Russinovich的Sysinternals - www.sysinternals.com

企業軟件@ 2012

從應用

啓動機器 「XXXXXXX」 任務

從註冊表恢復軟件列表消息

的Program.exe退出機器,錯誤代碼0 。

當我mak e爲.NET的PSEXEC電話,我不能恢復我的應用程序的輸出,它 只是表明:

PSEXEC v1.98 - 執行過程遠程

版權所有(C)2001-2010

馬克Russinovich編寫的Sysinternals - www.sysinternals.com

的Program.exe機器退出,錯誤代碼0

我正在爲流程類分配正在從流程恢復異步 數據的代理,但此信息不在此處。

我粘貼一些代碼,看看如果你能找到我的C#控制檯應用程序 輸出沒有出現的原因:

我啓動的命令是:

Dim CmdExe As String = "\\#MAQUINA# -u #USUARIO# -p #CLAVE# -s -c -f """ + executionPath + """" 

指標的影響-S(運行方式系統)C(複製本地文件到遠程系統)-f(強制覆蓋)

Private Sub LanzarProceso() 
     CheckForIllegalCrossThreadCalls = False 
     Dim Proceso As New Process 
     AddHandler Proceso.OutputDataReceived, AddressOf CallbackProcesoAsync 
     AddHandler Proceso.ErrorDataReceived, AddressOf ErrorDataReceivedAsync 

     Dim startInfo As New ProcessStartInfo 
     startInfo.FileName = execFile 
     startInfo.Arguments = CmdExe.Replace("#MAQUINA#", txtFiltroMaquina.Text).Replace _ 
              ("#USUARIO#", txtUsuario.Text.Trim).Replace _ 
              ("#CLAVE#", txtClave.Text.Trim) 
     Proceso.EnableRaisingEvents = True 
     startInfo.UseShellExecute = False 
     startInfo.RedirectStandardOutput = True 
     startInfo.RedirectStandardError = True 
     startInfo.CreateNoWindow = False 
     Proceso.StartInfo = startInfo 
     Proceso.Start() 
     Proceso.BeginOutputReadLine() 
     Proceso.BeginErrorReadLine() 
     Proceso.WaitForExit() 


    End Sub 

代表處理數據:

Private Sub CallbackProcesoAsync(sender As Object, args As System.Diagnostics.DataReceivedEventArgs) 

     If Not args.Data Is Nothing AndAlso Not String.IsNullOrEmpty(args.Data) Then 
      If Not listtask.InvokeRequired Then 
       listtask.Items.Add(args.Data.ToString) 
      Else 
       Dim d As New TextToControl(AddressOf AddToControl) 
       listtask.Invoke(d, args.Data.ToString) 
      End If 

     End If 

    End Sub 

    Private Sub ErrorDataReceivedAsync(sender As Object, args As System.Diagnostics.DataReceivedEventArgs) 
     If Not args.Data Is Nothing AndAlso Not String.IsNullOrEmpty(args.Data) Then 
      If Not listtask.InvokeRequired Then 
       listtask.Items.Add(args.Data.ToString) 
      Else 
       Dim d As New TextToControl(AddressOf AddToControl) 
       listtask.Invoke(d, args.Data.ToString) 
      End If 

     End If 
    End Sub 

我檢查程序是否正確完成。 C#的可執行具有

Enviroment.Exit(0); 

在執行

回答

0

好,我找到了最好的解決方法,以獲得PSEXEC和執行後,我的C#應用​​程序 之間所有的輸出是:

昏暗CmdExe的String =「\#MAQUINA#-u#USUARIO#-p#CLAVE#-s -c -f「」「+ executionPath +」「」> outputFileCode.txt「

這使我可以解析標準輸出而不必改變任何東西或直接調用我的程序,因爲我不能這樣做。

0

的到底是什麼,你在控制檯窗口中看到的是發送雙方PSEXEC以及子進程控制檯輸出的混合。您可以攔截從PSEXEC輸出,但這樣做對孩子將需要在PSEXEC,這顯然不具有

儘量去除中介攔截代碼 - 打電話給你的可執行文件直接

+0

我試圖調用「cmd.exe/c」c:\ myprogram「作爲cmd.exe那個給我輸出但是應用程序掛起的人,這是必須的,我不能使用其他的東西,ps exec:/ –

+0

+50賞金給你,因爲你是唯一一個嘗試和回答的人 –

相關問題