Chamar programas apartir de um serviço
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?
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
Curtidas 0
Respostas
Fabio Rosa
22/08/2012
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.
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.
GOSTEI 0
Pjava
22/08/2012
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");
{
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");
GOSTEI 0
Edson Oliveira
22/08/2012
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();
GOSTEI 0
Pjava
22/08/2012
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
//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
GOSTEI 0
Pjava
22/08/2012
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");
}
}
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");
}
}
GOSTEI 0
Pjava
22/08/2012
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?
GOSTEI 0
Pjava
22/08/2012
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?
GOSTEI 0
Edson Oliveira
22/08/2012
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
Console
É so colocar o .exe do console junto com o .exe do serviço.
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.
GOSTEI 0