2016-05-03 3 views
0

У меня есть библиотека C# WCF, и я хочу вызвать команду cmd из одного из методов в библиотеке WCF, но когда я запускаю код и вызываю этот метод, он не выполняет cmd команда и не генерирует каких-либо исключений, что мне делать, мой код меньше. Пожалуйста, помогите мне.как вызвать команду cmd из библиотеки WCF 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 - вы создаете это как «Информация», но устанавливаете «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

Извините, но то, что я должен написать вместо «program.exe», я хочу, чтобы выполнить команду CMD, так что еще я должен написать, там нет другого исполняемого файла. –

+0

cmd просто дает вам окно команд. Что бы вы побежали после этого? –

+0

Хорошо .. Я поместил Tally.exe в это место, но все же он не работает ... есть ли какие-либо проблемы, связанные с поддержкой GUI с библиотекой WCF .. ?? –

0

Я имел эту проблему на некоторых серверах, и это было связанно с 2-х вопросами 1. Разрешение безопасности иногда блокирует ех командной строки и просящий диалог подтверждения, который не виден. 2. Еще одна проблема решается с помощью следующих параметров:

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

Да, я сделал это правильно, но все еще не работает. –

Смежные вопросы