2016-05-03 21 views
0

私はC#WCFライブラリを持っており、WCFライブラリのメソッドの1つからcmdコマンドを呼び出すが、コードを実行してそのメソッドを呼び出すと、コマンドも例外を生成しません。どうすればいいですか、私のコードは以下の通りです。WCFライブラリからcmdコマンドを呼び出す方法C#

私はすでにcmdでコマンドを検証していますが、cmdからは正常に実行されますが、WCFライブラリからは正常に実行されるため、コマンド構文に問題はありません。 はここ

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo(); 
Info.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
Info.FileName = "cmd.exe"; 
Info.Arguments= 
     "\"" + tallyPath + "\"" + " " 
     + "/TDL:" + tdlPath + " " + "/LOAD:" 
     + cmpCode + " " + "/SETVAR:SVVarUN:" 
     + uname + " " + "/SETVAR:SVVarPass:" 
     + pwd; 

proc.StartInfo = startInfo 
proc.Start(); 

答えて

0

コード編集の答えを入力してください - 私は試してみて、できる限り自分のシナリオを模倣するためにWCFサービスの最も単純なを構築しています。私はこれをテストし、うまく動作する(下に貼り付けた)。上の例で正しく表示されていないようにコメントアウトされた行に注意してください。また、StartInfoに問題がありました。作成するのは "Info"ですが、存在しないように見える "proc.StartInfo = startInfo"を設定します。これは "Info"に設定する必要があります。

using System.Diagnostics; 
using System.ServiceModel; 

namespace WcfService1 
{ 
    [ServiceContract] 
    public interface IService1 
    { 
     [OperationContract] 
     string RunTally(); 
    } 

    public class Service1 : IService1 
    { 
     public string RunTally() 
     { 
      var tallyPath = "C:\\temp\\"; 
      var tallyExe = "tally.exe"; 
      var cmpCode = "myCmpCode"; 
      var uname = "myUname"; 
      var pwd = "myPwd"; 
      var tdlPath = "myTdlPath"; 

      Process proc = new Process(); 
      ProcessStartInfo info = new ProcessStartInfo(); 
      info.WindowStyle = ProcessWindowStyle.Hidden; 
      info.RedirectStandardOutput = true; 
      info.RedirectStandardInput = true; 
      info.RedirectStandardError = true; 
      info.UseShellExecute = false; 
      info.Arguments = 
       // "\"" + tallyPath + "\"" + " " 
       // + 
       "/TDL:" + tdlPath + " " + "/LOAD:" 
       + cmpCode + " " + "/SETVAR:SVVarUN:" 
       + uname + " " + "/SETVAR:SVVarPass:" 
       + pwd; 
      info.FileName = tallyPath + tallyExe; 

      proc.StartInfo = info;    
      proc.Start(); 

      var textReceived = ""; 
      while (!proc.StandardOutput.EndOfStream) 
      { 
       textReceived += proc.StandardOutput.ReadLine(); 
      } 

      return string.Format("The call returned: " + textReceived); 
     } 
    } 
} 
+0

申し訳ありませんが、私はそう他に何が、私はそこに、書くべき、私はCMDコマンドを実行したい、「PROGRAM.EXE」の代わりに書く必要があります他の実行可能ファイルは必要ありません。 –

+0

cmdはコマンドウィンドウを表示します。その後、あなたは何をしますか? –

+0

Ok ..私はその場所にTally.exeを入れましたが、まだ動作していません... WCFライブラリのGUIサポートに関する問題はありますか? –

0

私は一部のサーバ上でこの問題を持っていたし、それはセキュリティ許可は時々、コマンドラインexeファイルをブロックし、表示されていない確認ダイアログ、を求めて1 2つの問題によるものでした。 2.もう一つの問題は、次の設定を使用して解決される。

process.StartInfo.UseShellExecute = false; 
    process.StartInfo.RedirectStandardOutput = true; 
    process.StartInfo.RedirectStandardError = true; 
    process.StartInfo.RedirectStandardInput = true; 
+0

はい私はそれを正しく行っていますが、まだ動作していません。 –