Agarwal1984 Ответов: 3

Как запустить внешний exe-файл из службы windows в C# .NET?


Привет,

How to run external exe from windows service in c# .net?


Я хочу запустить внешний exe-файл из службы windows, но он получает ошибку относительно компиляции just-in-time.

Я пробовал этот код в службе windows.

Пожалуйста, помогите мне.
заранее спасибо.

Анкит Агарвал
инженер-программист

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

защищенное переопределение void OnStart(string[] args)
{
пробовать
{
//Отладчик.Ломать();
TraceService("Старт Сервис" + "" + Дата И Время.Сейчас.Метод toString());
// timer1.Интервал = 1000;

timer1. Elapsed += new ElapsedEventHandler(OnElapsedTime);
таймера1.Включен = истина;
//Отладчик.Ломать();
}
поймать (исключение бывший)
{
TraceService ("Error:" + ex);
//Событий.WriteEntry ("Error:" + ex. Message);
}
}
private void bw_DoWork(отправитель объекта, DoWorkEventArgs e)
{

Process proc = новый процесс();
//строки каталог название = @"D:\TaskbarNotifierDemo.exe";
//RemoveDirectorySecurity(DirectoryName," Администраторы", FileSystemRights.ExecuteFile, AccessControlType. Deny);

proc. StartInfo = новый ProcessStartInfo (@"D:\TaskbarNotifierDemo.exe");
//тез.Докл.Информацию.Значение свойства useshellexecute = истина;
//тез.Докл.Информацию.Глагол = " руны";
тез.Докл.Начать();
процесс.WaitForExit();
базы.Стоп();
}
частный недействительными OnElapsedTime(источник, объект, ElapsedEventArgs е)
{
bool connection = NetworkInterface.GetIsNetworkAvailable();
if (connection = = true)
{
BackgroundWorker bw = новый BackgroundWorker();
чёрно-белый.DoWork += новый DoWorkEventHandler(bw_DoWork);
БВ.RunWorkerAsync();
}
}

[no name]

Позвольте мне посмотреть, понимаю ли я это, так как вы ничего не объяснили о своей проблеме. Вы пытаетесь запустить службу, которая не имеет пользовательского интерфейса, и пытаетесь запустить приложение, которое имеет пользовательский интерфейс, когда службам запрещено отображать пользовательские интерфейсы? Вы видите, в чем проблема?

3 Ответов

Рейтинг:
2

Dave Kreskowiak

Во-первых, ваш сервис, вероятно, работает как LocalSystem. Эта учетная запись не имеет никакого доступа к сетевым дискам, поэтому, если ваш диск "D:" является сетевым диском, LocalSystem не может его видеть. Обычно вы создаете учетную запись пользователя, специально настроенную для запуска службы, если ей требуется доступ к сетевым ресурсам.

Далее, Если вы используете сопоставленную букву диска, не делайте этого. Вместо этого используйте UNC-пути. Службы не будут иметь никаких подключенных дисков. Они не используют сопоставление дисков, установленное пользователем, вошедшим в систему. Пользователь является отдельным пользователем и работает под отдельным рабочим столом и сеансом. То, что один пользователь делает на компьютере, не влияет на другие сеансы и рабочие столы.

Далее, сервисы не могут показывать какой-либо пользовательский интерфейс. Никаких сообщений, окон, диалогов, ничего.

Это включает в себя процессы, запущенные службой. Процесс будет запущен, но поскольку он работает на рабочем столе независимо от рабочего стола, который видит вошедший пользователь, этот процесс вообще не будет виден вошедшему пользователю. Он может появиться в Диспетчере задач, но это приложение вообще не сможет взаимодействовать с рабочим столом пользователя.

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


Рейтинг:
2

SreeniChamp

Попробуйте этот код

Процесс p = новый процесс();
p. StartInfo.Имя файла = "cmd.exe";
p. StartInfo.Аргументы = " /c dir *. cs";
п. Информацию.Значение свойства useshellexecute = false в;
п. Информацию.RedirectStandardOutput = true в;
p. начало();

string output = p. StandardOutput.ReadToEnd();
p. WaitForExit();


Надеюсь, это поможет!


Agarwal1984

Этот код не работает.
я должен запустить внешнее мое приложение exe.
Процесс p = новый процесс();
p. StartInfo.Имя файла = @"C:\Program файлы (x86)\Microsoft\Notification\TaskbarNotifierDemo.exe";
p. StartInfo.Аргументы = " /c dir *. cs";
п. Информацию.Значение свойства useshellexecute = false в;
п. Информацию.RedirectStandardOutput = true в;
p. начало();

string output = p. StandardOutput.ReadToEnd();
p. WaitForExit();

но получаю ошибку:-
Отладчик Just-In-Time был запущен без необходимых разрешений безопасности. Чтобы отладить этот процесс, отладчик Just-In-Time должен быть запущен от имени администратора. Хотите отладить этот процесс?

Он не работает через службу windows.