Я написал программу обслуживания 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
}
}
}
Выполняет ли 'ExecuteCommandSync' команду, которую вы хотите работать как ожидалось в простом консольном приложении? Вы пытались его отладить? Код выглядит прекрасно до сих пор ... –
все работает, кроме команды, и не возвращает ошибку! –
Так что же вы ожидаете? Если я выполняю 'echo. | Clip' в cmd, ничего не происходит. Таким образом, ваш код работает так, как ожидалось. –