Chamar programas apartir de um serviço

22/08/2012

0

Para chamar, a calculadora do windows, por exemplo, só preciso disso?

protected override void OnStart(string[] args)
{
System.Diagnostics.Process.Start("calc");
}

Se for somente isso, não está funcionando. O que mais preciso informar?
Pjava

Pjava

Responder

Posts

22/08/2012

Fabio Rosa

Olha,

Acredito que como você está em um serviço, deverá informar o path completo da aplicação, pois as variáveis de sistema não são vistas pelo serviço... Então você não pode informar apenas "Calc" e sim "%windir%\system32\calc.exe"

Tente isto... acho que pode resolver.

Att.
Responder

23/08/2012

Pjava

Fiz conforme abaixo e também não funcionou.

{
public Service1()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
Timer timer;
timer = new Timer(new TimerCallback(timer_Tick), null, 15000, 60000);
}

protected override void OnStop()
{
}

private void timer_Tick(object sender)

{
//System.Diagnostics.Process.Start("%windir%\\system32\\calc.exe");
System.Diagnostics.Process.Start("C:\\Windows\\system32\\calc.exe");
}
}


Já coloquei essa linha direto no OnStart e também não funciona

System.Diagnostics.Process.Start("C:\\Windows\\system32\\calc.exe");
Responder

23/08/2012

Edson Oliveira

Tenta isso.
Process oProcess = null;
ProcessStartInfo oProcessStartInfo = new ProcessStartInfo("C:\\WINDOWS\\SYSTEM32\\CALC.EXE");

string pwd = "mypassword";//
System.Security.SecureString securePwd = new System.Security.SecureString();

foreach (char c in pwd)
    securePwd.AppendChar(c);

oProcessStartInfo.UseShellExecute = false;
oProcessStartInfo.Password = securePwd;
oProcessStartInfo.UserName = "myserviceaccount"; 
oProcessStartInfo.Domain = "MyCompanyDomain"; 

oProcess = Process.Start(oProcessStartInfo);
            
oProcess.WaitForExit();
oProcess.Close();
Responder

23/08/2012

Pjava

Se eu coloco essas linhas, o serviço não starta

//foreach (char c in pwd)
// securePwd.AppendChar(c);

//oProcessStartInfo.UseShellExecute = false;
//oProcessStartInfo.Password = securePwd;
//oProcessStartInfo.UserName = "psilva";
//oProcessStartInfo.Domain = "CasaNova";

E se comento, a calculadora não sobe
Responder

23/08/2012

Pjava

Fiz dessa outra maneira e nada também

System.Timers.Timer MyTimer;

public Service1()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{


//Tempo para 20 segundos
MyTimer = new System.Timers.Timer(20000);
MyTimer.Elapsed += new ElapsedEventHandler(MyTimer_Elapsed);
MyTimer.Start();
}

void MyTimer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
MyTimer.Stop();

System.Diagnostics.Process.Start("C:\\Windows\\system32\\calc.exe");
}
catch (Exception)
{
//ALGUM LOG, MAS NÃO DEIXE LEVANTAR A EXCEÇÃO
}
finally
{
MyTimer.Start();
}
}

protected override void OnStop()
{
}

private void timer_Tick(object sender)

{
//System.Diagnostics.Process.Start("%windir%\\system32\\calc.exe");
System.Diagnostics.Process.Start("C:\\Windows\\system32\\calc.exe");
}
}
Responder

23/08/2012

Pjava

Caiu a ficha da seguinte forma. Em realidade está chamando sim, a calculadora, só que eu não visualizo. No gerenciador de tarefas, dá pra var a calc.exe sendo executada, mas não visualizo. O que faço nessas condições?
Responder

24/08/2012

Pjava

Me disseram que o Windows Service pode até chamar um programa, mas não vai mostra-lo sendo executado, ou seja, interagir com o usuário. Isso é verdade? A minha calculadora é executada, mas não aparece na minha tela, daí esses vários posts. É verdade isso?
Responder

24/08/2012

Edson Oliveira

Eu não se tem algum jeito de fazer aparecer o programa, mas você pode criar um projeto console e recebi os argumentos, pode ser assim.

Serviço
Process oProcess = new Process();

oProcess.EnableRaisingEvents = false;

oProcess.StartInfo.FileName = @"ConsoleApplication1.exe";

oProcess.StartInfo.Arguments = "--calc";

oProcess.Start();


Console
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                if (args[0] == "--calc")
                {
                    Process.Start("calc.exe");
                }
            }
        }
    }
}


É so colocar o .exe do console junto com o .exe do serviço.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar