Process Problems - XCOPY ExitCode

G

Guest

Hello,

I am attempting to write a Web Method in my Web Service that starts a
process that runs the XCOPY command with passed in parameters. It is failing
on me through code. However, if I take the exact same string it is passing
and past it into a Command prompt, it works perfectly. That told me it may
be a permissions/impersonation issue. I am now running it as a special
ServiceAccount I have created that is a Domain Admin. It still does not
work. I then looked to see if it was returning an error or ExitCode and it
is.

The ExitCode == 4 which for XCOPY means "Initialization error occurred.
There is not enough memory or disk space, or you entered an invalid drive
name or invalid syntax on the command line."

Here is my code and the output follows - Can anyone help me here? Do I
really need impersonation or is it some other fix?

FYI: The AddSQLStatement method is simply a way I store information in a
string array for extraction later to determine what happens in my code.


string sXCopy = "\"" + sBaseFolder + sSourceFolder + "\"" +
" \"" + sBaseFolder + sDestination + "\"" +
" /E /V /C /I /O /Y /K";

AddSQLStatement("XCOPY: " + sXCopy);
AddSQLStatement("USER: " + System.Environment.UserDomainName + "\\" +
System.Environment.UserName);
AddSQLStatement("User: " +
System.Security.Principal.WindowsIdentity.GetCurrent().Name);

try {
Process oProc = new Process();
oProc.EnableRaisingEvents = false;
oProc.StartInfo.FileName = "XCOPY";
oProc.StartInfo.Arguments = sXCopy;
oProc.StartInfo.RedirectStandardOutput = true;
oProc.StartInfo.UseShellExecute = false;
oProc.Start();
AddSQLStatement("StdOut: " + oProc.StandardOutput.ReadToEnd()); ////
oProc.WaitForExit();
AddSQLStatement("Exit Code: " + oProc.ExitCode.ToString()); ////
} catch(Exception e) {
AddSQLStatement("XCOPY Error: " + e.ToString());
exLastError = e;
} // try-catch

<<<<<< This is the output >>>>>>>>

Exit Code: 4
StdOut: 0 File(s) copied
User: CSDomain\ServiceAccount
USER: CSDOMAIN\ServiceAccount
XCOPY: "\\Cochise\JobFolders\_FolderTemplate"
"\\Cochise\JobFolders\6126_Test25e" /E /V /C /I /O /Y /K
 
B

Brian Cryer

Grigs said:
Hello,

I am attempting to write a Web Method in my Web Service that starts a
process that runs the XCOPY command with passed in parameters. It is
failing
on me through code. However, if I take the exact same string it is
passing
and past it into a Command prompt, it works perfectly. That told me it
may
be a permissions/impersonation issue. I am now running it as a special
ServiceAccount I have created that is a Domain Admin. It still does not
work. I then looked to see if it was returning an error or ExitCode and
it
is.

The ExitCode == 4 which for XCOPY means "Initialization error occurred.
There is not enough memory or disk space, or you entered an invalid drive
name or invalid syntax on the command line."

Here is my code and the output follows - Can anyone help me here? Do I
really need impersonation or is it some other fix?

FYI: The AddSQLStatement method is simply a way I store information in a
string array for extraction later to determine what happens in my code.


string sXCopy = "\"" + sBaseFolder + sSourceFolder + "\"" +
" \"" + sBaseFolder + sDestination + "\"" +
" /E /V /C /I /O /Y /K";

AddSQLStatement("XCOPY: " + sXCopy);
AddSQLStatement("USER: " + System.Environment.UserDomainName + "\\" +
System.Environment.UserName);
AddSQLStatement("User: " +
System.Security.Principal.WindowsIdentity.GetCurrent().Name);

try {
Process oProc = new Process();
oProc.EnableRaisingEvents = false;
oProc.StartInfo.FileName = "XCOPY";
oProc.StartInfo.Arguments = sXCopy;
oProc.StartInfo.RedirectStandardOutput = true;
oProc.StartInfo.UseShellExecute = false;
oProc.Start();
AddSQLStatement("StdOut: " + oProc.StandardOutput.ReadToEnd()); ////
oProc.WaitForExit();
AddSQLStatement("Exit Code: " + oProc.ExitCode.ToString()); ////
} catch(Exception e) {
AddSQLStatement("XCOPY Error: " + e.ToString());
exLastError = e;
} // try-catch

<<<<<< This is the output >>>>>>>>

Exit Code: 4
StdOut: 0 File(s) copied
User: CSDomain\ServiceAccount
USER: CSDOMAIN\ServiceAccount
XCOPY: "\\Cochise\JobFolders\_FolderTemplate"
"\\Cochise\JobFolders\6126_Test25e" /E /V /C /I /O /Y /K

I may be barking up the wrong tree here, but what is the working directory
when you launch xcopy? I seem to recall that dos commands don't take kindly
to be kicked off on a share and like the current working directory to be
something with a drive letter.

Just a thought.

Brian.

www.cryer.co.uk/brian
 
G

Guest

Brian,

Thanks. I tried your suggestion with no luck. I put in C:\ with no luck.
I even put the exact path to the XCOPY function. I even tested changing the
UNC paths to be a drive letter and that didn't work either.

Anyone have any other suggestions?
 

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

Similar Threads


Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,534
Members
45,007
Latest member
obedient dusk

Latest Threads

Top