2016-03-09 2 views
0

Я написал программу обслуживания C# для выполнения команды windows. Он не выполняет команду, но служба работает правильно. Кто-нибудь, пожалуйста, помогите мне исправить этотКак запустить команду из службы Windows?

код

public partial class ScheduledService : ServiceBase 
{ 
    Boolean armed = false; 
    //Initialize the timer 
    //This method is used to raise event during start of service 
    Timer timer = new Timer(); 

    public ScheduledService() 
    { 
     InitializeComponent(); 
    }   

    protected override void OnStart(string[] args) 
    { 
     //add this line to text file during start of service 
     TraceService("start service"); 

     //handle Elapsed event 
     timer.Elapsed += new ElapsedEventHandler(OnElapsedTime); 

     //This statement is used to set interval to 1 minute (= 60,000 milliseconds) 

     timer.Interval = 10000; 
    } 


    //This method is used to stop the service 
    protected override void OnStop() 
    { 
     timer.Enabled = false; 
     TraceService("stopping service"); 
    } 

    private void OnElapsedTime(object source, ElapsedEventArgs e) 
    { 
     ExecuteCommandSync("echo.|clip"); 
     TraceService("Another entry at "+DateTime.Now); 
     System.Windows.Forms.Clipboard.Clear();     
    } 

    private void TraceService(string content) 
    { 
     //set up a filestream 
     FileStream fs = new FileStream(@"d:\ScheduledService.txt",FileMode.OpenOrCreate, FileAccess.Write); 

     //set up a streamwriter for adding text 
     StreamWriter sw = new StreamWriter(fs); 

     //find the end of the underlying filestream 
     sw.BaseStream.Seek(0, SeekOrigin.End); 

     //add the text 
     sw.WriteLine(content); 
     //add the text to the underlying filestream 

     sw.Flush(); 

     //close the writer 
     sw.Close(); 
    } 

    public void ExecuteCommandSync(object command) 
    { 
     try 
     { 
      System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command); 
      procStartInfo.RedirectStandardOutput = true; 
      procStartInfo.UseShellExecute = false; 
      procStartInfo.CreateNoWindow = true; 
      System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
      proc.StartInfo = procStartInfo; 
      proc.Start(); 
     } 
     catch (Exception objException) 
     { 
      // Log the exception 
     } 
    } 
} 
+0

Выполняет ли 'ExecuteCommandSync' команду, которую вы хотите работать как ожидалось в простом консольном приложении? Вы пытались его отладить? Код выглядит прекрасно до сих пор ... –

+0

все работает, кроме команды, и не возвращает ошибку! –

+0

Так что же вы ожидаете? Если я выполняю 'echo. | Clip' в cmd, ничего не происходит. Таким образом, ваш код работает так, как ожидалось. –

ответ

0

Вы звоните OnElapsedTime после каждых 10 секунд, но не делаете ничего в этой функции, кроме LogTracing. Я думаю, вы хотели вызвать ExecuteCommandSync из OnElapsedTime для запуска команды.

+0

см. мое редактирование –

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