Mohammad Tavoosi Ответов: 2

Как запустить exe-файл в службе Windows C#?


Я собираюсь запустить exe-файл в Службе C# windows, но служба не запускается, и я получаю ошибку!
Я также тестирую на запись в текстовый файл таким образом, и это нормально!
Вы не могли бы мне помочь???
Спасибо.


Что я уже пробовал:

Я уже пробовал эти коды:
private void LogService(string content)
       {
           if (!ProgramRun)
               RunProgram();
           //
           FileStream fs = new FileStream(@"d:\TestServiceLog.txt", FileMode.OpenOrCreate, FileAccess.Write);
           StreamWriter sw = new StreamWriter(fs);
           sw.BaseStream.Seek(0, SeekOrigin.End);
           sw.WriteLine(content);
           sw.Flush();
           sw.Close();
       }

       private void RunProgram()
       {
           ProgramRun = true;
           string ProgramPath = @"\ScreenSaverSample1\bin\Debug\ScreenSaverSample1.exe";
           string startupPath = Environment.CurrentDirectory;
           string projectDirectory = Directory.GetParent(startupPath).Parent.Parent.FullName + ProgramPath;
           // Console.WriteLine(projectDirectory);
           Process p = new Process();
           p.StartInfo.FileName = projectDirectory;
           //   p.StartInfo.Arguments = "/c dir *.cs";
           p.StartInfo.UseShellExecute = false;
           p.StartInfo.RedirectStandardOutput = true;
           p.Start();
           string output = p.StandardOutput.ReadToEnd();
           p.WaitForExit();
           // Console.WriteLine("Exited!");
           ProgramRun = false;
       }

2 Ответов

Рейтинг:
2

OriginalGriff

Службы не могут иметь никакого пользовательского интерфейса или запускать приложение, которое имеет его, и Ваше имя приложения подразумевает, что оно обращается к дисплею.
Службы Windows не могут запускать дополнительные приложения, поскольку они не выполняются в контексте какого-либо конкретного пользователя. В отличие от обычных приложений Windows, службы выполняются в изолированном сеансе и не могут взаимодействовать с пользователем или рабочим столом. Это не оставляет места для запуска приложения.

Я не знаю, что ты пытаешься сделать, но это не сработает!


Mohammad Tavoosi

Я хочу запустить исполняемый файл автоматически после включения компьютера. Каково ваше предложение?

OriginalGriff

Вы не можете: вы можете запускать службы (которые вообще не имеют пользовательского интерфейса) только до тех пор, пока пользователь не войдет в систему, потому что до тех пор нет рабочего стола, нет пользователя, с которым можно взаимодействовать. Вы не можете запустить заставку на экране входа в систему, потому что нет рабочего стола для ее "замены".

Такое поведение является преднамеренным: это функция безопасности, чтобы предотвратить "кражу логина" приложений, выставляющих экран, притворяющийся экраном входа, захватывая данные входа, а затем закрывая их, как будто они были неправильными.

Рейтинг:
1

Dave Kreskowiak

Как вы это сделаете, зависит от приложения, которое вы хотите запустить.

Если он вообще показывает какой-либо пользовательский интерфейс, он не может работать при запуске Windows. Там нет рабочего стола пользователя для приложения, чтобы показать себя на нем, так что нет никакой возможности запустить его. Только службы запускаются при запуске Windows.

Приложения, которые пользователь может видеть, должны запускаться при входе в систему. Это можно сделать, запустив приложение из планировщика или поместив командную строку для запуска приложения в реестр под ключом HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run. Всякий раз, когда пользователь входит в систему, выполняются все команды под этим ключом, обычно запускающие приложения.

Экранная заставка, поскольку она взаимодействует с рабочим столом, не может быть запущена из службы. Вы можете прочитать больше о сеансах Windows и настольных компьютерах здесь[^].