System.Diagnostics.Process() hangs

S

Saya

Hi Folks,

I have now spend app. 3 days to get the below scenario to work, but
can not get there!

..Net version = 2.0.50727
Windows version = Microsoft Windows [Version 5.2.3790] = Windows
Server 2003

Now I have to develop a webservice which is run on the server. The
webservice will need to invoke an exe (which is a server application
exe). Now this exe file needs to be exeucuted as an application user,
thus I have the need of starting the process as a application user
through the webservice.

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
// Added
using System.Diagnostics;
using System.Security;
using System.IO;
using System.Configuration;

[WebService(Namespace = "http://intranet.webservices.lundbeck.com/")]
public class TSUsers : System.Web.Services.WebService
{
public TSUsers () {
//Uncomment the following line if using designed components
//InitializeComponent();
}

[WebMethod]
public string CreateTSUser(String UserName, String UserEmail)
{
Process p = new Process();

p.StartInfo.UserName =
ConfigurationManager.AppSettings["TSMasterName"];
p.StartInfo.Password = GetSecurePass();
p.StartInfo.Domain = "hlucorp";
//p.StartInfo.LoadUserProfile = true;

p.StartInfo.FileName = @"e:\iw-home\bin\iwuseradm.exe";
p.StartInfo.Arguments = "add-user hluw0447d\\tstest1";
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;

try {
p.Start();
p.WaitForExit(1000);

StreamReader srOutput = p.StandardOutput;
StreamReader srError = p.StandardError;
String CmdOutput = srOutput.ReadToEnd();
String CmdError = srError.ReadToEnd();
srError.Close();
srOutput.Close();

return CmdError;
}
catch (Exception ex) {
return ex.Message;
}
}

[WebMethod]
private SecureString GetSecurePass() {
// Different user
SecureString securePass = new SecureString();
String UserPass =
ConfigurationManager.AppSettings["TSMasterPassword"];

foreach (char C in UserPass) {
securePass.AppendChar(C);

}
return securePass;
}
}

Now I can see in the taskmanager that iwuseradm.exe has been started
as the application user, but nothing happens. the whole thing just
hangs!

I have seen a lot of postings on this matter, but not one offered a
solution. Different security issues are discussed etc. but no
solution!

Can anyone help ?

Regards
Saya
 
J

John MJ Gorter

Did you try to mannually execute the proces with the given parameters.
It might be that the executing process is waiting for input....
 
G

Guest

you coded a deadly embrace.

you redirected output & input, then did a wait for task exit. but it cannot
exit until it writes its output, which you won't read until it exits. thus a
hang.

-- bruce (sqlwork.com)
 
S

Saya

Hi John,

Yes I have tried the command manually, and it works fine, with the
user that I am impersonating.
The command is such that if the paramters are not supplied it responds
immediately with error.


Did you try to mannually execute the proces with the given parameters.
It might be that the executing process is waiting for input....



Hi Folks,
I have now spend app. 3 days to get the below scenario to work, but
can not get there!
.Net version = 2.0.50727
Windows version = Microsoft Windows [Version 5.2.3790] = Windows
Server 2003
Now I have to develop a webservice which is run on the server. The
webservice will need to invoke an exe (which is a server application
exe). Now this exe file needs to be exeucuted as an application user,
thus I have the need of starting the process as a application user
through the webservice.
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
// Added
using System.Diagnostics;
using System.Security;
using System.IO;
using System.Configuration;
[WebService(Namespace = "http://intranet.webservices.lundbeck.com/")]
public class TSUsers : System.Web.Services.WebService
{
public TSUsers () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
public string CreateTSUser(String UserName, String UserEmail)
{
Process p = new Process();
p.StartInfo.UserName =
ConfigurationManager.AppSettings["TSMasterName"];
p.StartInfo.Password = GetSecurePass();
p.StartInfo.Domain = "hlucorp";
//p.StartInfo.LoadUserProfile = true;
p.StartInfo.FileName = @"e:\iw-home\bin\iwuseradm.exe";
p.StartInfo.Arguments = "add-user hluw0447d\\tstest1";
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
try {
p.Start();
p.WaitForExit(1000);
StreamReader srOutput = p.StandardOutput;
StreamReader srError = p.StandardError;
String CmdOutput = srOutput.ReadToEnd();
String CmdError = srError.ReadToEnd();
srError.Close();
srOutput.Close();
return CmdError;
}
catch (Exception ex) {
return ex.Message;
}
}
[WebMethod]
private SecureString GetSecurePass() {
// Different user
SecureString securePass = new SecureString();
String UserPass =
ConfigurationManager.AppSettings["TSMasterPassword"];
foreach (char C in UserPass) {
securePass.AppendChar(C);
}
return securePass;
}
}
Now I can see in the taskmanager that iwuseradm.exe has been started
as the application user, but nothing happens. the whole thing just
hangs!
I have seen a lot of postings on this matter, but not one offered a
solution. Different security issues are discussed etc. but no
solution!
Can anyone help ?
Regards
Saya- Skjul tekst i anførselstegn -

- Vis tekst i anførselstegn -
 
G

George Ter-Saakov

Does it have any dialog boxes like asking yes/no?
If so then you will not see it and can not click button.

George


Hi John,

Yes I have tried the command manually, and it works fine, with the
user that I am impersonating.
The command is such that if the paramters are not supplied it responds
immediately with error.


Did you try to mannually execute the proces with the given parameters.
It might be that the executing process is waiting for input....



Hi Folks,
I have now spend app. 3 days to get the below scenario to work, but
can not get there!
.Net version = 2.0.50727
Windows version = Microsoft Windows [Version 5.2.3790] = Windows
Server 2003
Now I have to develop a webservice which is run on the server. The
webservice will need to invoke an exe (which is a server application
exe). Now this exe file needs to be exeucuted as an application user,
thus I have the need of starting the process as a application user
through the webservice.
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
// Added
using System.Diagnostics;
using System.Security;
using System.IO;
using System.Configuration;
[WebService(Namespace = "http://intranet.webservices.lundbeck.com/")]
public class TSUsers : System.Web.Services.WebService
{
public TSUsers () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
public string CreateTSUser(String UserName, String UserEmail)
{
Process p = new Process();
p.StartInfo.UserName =
ConfigurationManager.AppSettings["TSMasterName"];
p.StartInfo.Password = GetSecurePass();
p.StartInfo.Domain = "hlucorp";
//p.StartInfo.LoadUserProfile = true;
p.StartInfo.FileName = @"e:\iw-home\bin\iwuseradm.exe";
p.StartInfo.Arguments = "add-user hluw0447d\\tstest1";
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
try {
p.Start();
p.WaitForExit(1000);
StreamReader srOutput = p.StandardOutput;
StreamReader srError = p.StandardError;
String CmdOutput = srOutput.ReadToEnd();
String CmdError = srError.ReadToEnd();
srError.Close();
srOutput.Close();
return CmdError;
}
catch (Exception ex) {
return ex.Message;
}
}
[WebMethod]
private SecureString GetSecurePass() {
// Different user
SecureString securePass = new SecureString();
String UserPass =
ConfigurationManager.AppSettings["TSMasterPassword"];
foreach (char C in UserPass) {
securePass.AppendChar(C);
}
return securePass;
}
}
Now I can see in the taskmanager that iwuseradm.exe has been started
as the application user, but nothing happens. the whole thing just
hangs!
I have seen a lot of postings on this matter, but not one offered a
solution. Different security issues are discussed etc. but no
solution!
Can anyone help ?
Regards
Saya- Skjul tekst i anførselstegn -

- Vis tekst i anførselstegn -
 
S

Saya

Hi George,

There are no windows where I need to click yes/no/next or anything
like that. I have even tried with a test.bat file. The bat file is
very simple and runs %system% ver, and returns the windows version.
This file can be succesfully invoked, if the impersonization is not
applied. But as soon as the imporsonization is turned in in the code,
this also hangs.
For me it seems like an error in the startinfo class, but what makes
me wonder is that .Net 2.0 has been released for a while and if it was
a bug in .Net framework, microsoft should have spotted that ages a
ago.

The process starts when impersonating but it seems as if it started in
idle/standby mode!

Does it have any dialog boxes like asking yes/no?
If so then you will not see it and can not click button.

George


Hi John,

Yes I have tried the command manually, and it works fine, with the
user that I am impersonating.
The command is such that if the paramters are not supplied it responds
immediately with error.

Did you try to mannually execute the proces with the given parameters.
It might be that the executing process is waiting for input....
Hi Folks,
I have now spend app. 3 days to get the below scenario to work, but
can not get there!
.Net version = 2.0.50727
Windows version = Microsoft Windows [Version 5.2.3790] = Windows
Server 2003
Now I have to develop a webservice which is run on the server. The
webservice will need to invoke an exe (which is a server application
exe). Now this exe file needs to be exeucuted as an application user,
thus I have the need of starting the process as a application user
through the webservice.
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
// Added
using System.Diagnostics;
using System.Security;
using System.IO;
using System.Configuration;
[WebService(Namespace = "http://intranet.webservices.lundbeck.com/")]
public class TSUsers : System.Web.Services.WebService
{
public TSUsers () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
public string CreateTSUser(String UserName, String UserEmail)
{
Process p = new Process();
p.StartInfo.UserName =
ConfigurationManager.AppSettings["TSMasterName"];
p.StartInfo.Password = GetSecurePass();
p.StartInfo.Domain = "hlucorp";
//p.StartInfo.LoadUserProfile = true;
p.StartInfo.FileName = @"e:\iw-home\bin\iwuseradm.exe";
p.StartInfo.Arguments = "add-user hluw0447d\\tstest1";
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
try {
p.Start();
p.WaitForExit(1000);
StreamReader srOutput = p.StandardOutput;
StreamReader srError = p.StandardError;
String CmdOutput = srOutput.ReadToEnd();
String CmdError = srError.ReadToEnd();
srError.Close();
srOutput.Close();
return CmdError;
}
catch (Exception ex) {
return ex.Message;
}
}
[WebMethod]
private SecureString GetSecurePass() {
// Different user
SecureString securePass = new SecureString();
String UserPass =
ConfigurationManager.AppSettings["TSMasterPassword"];
foreach (char C in UserPass) {
securePass.AppendChar(C);
}
return securePass;
}
}
Now I can see in the taskmanager that iwuseradm.exe has been started
as the application user, but nothing happens. the whole thing just
hangs!
I have seen a lot of postings on this matter, but not one offered a
solution. Different security issues are discussed etc. but no
solution!
Can anyone help ?
Regards
Saya- Skjul tekst i anførselstegn -
- Vis tekst i anførselstegn -- Skjul tekst i anførselstegn -

- Vis tekst i anførselstegn -
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,070
Latest member
BiogenixGummies

Latest Threads

Top