Solved

C#: how to catch error code

Posted on 2006-07-03
11
683 Views
Last Modified: 2008-02-26
Hello experts,
in my C# windows application (I'm using Visual Studio .Net 2003)
I need to catch the error code (sample 5 = Read-Only)  of the following statement:
---
System.Diagnostics.Process.Start("NET", "USE \\\\" + tmpMyComputer + " /user:" + tmpMyUserID + " " + tmpMyPassword);
---
This is equivalent to
---
Net Use \\<myComputer> /user:<myuserid> <mypassword>
---

If anyone knows how I can catch the error code created by this statement,
please supply an appropriate code snippet.

   Thank you very much for any help.

   HStrix
0
Comment
Question by:HStrix
  • 6
  • 5
11 Comments
 
LVL 44

Accepted Solution

by:
bruintje earned 200 total points
Comment Utility
Hi HStrix,
----------

if you use something like
using System.Diagnostics;


try
{
  Process MS = new Process();
  MS = Process.Start("NET", "USE \\\\" + tmpMyComputer + " /user:" + tmpMyUserID + " " + tmpMyPassword);
  //now you can lookup something that will be of use when looking at the autocomplete
  //MS.
  //you can read its error output or the exit state
}
catch (Exception ex)
{
    //do something here
}
finally
{

}

wrote this right in the box here so there could be something missing in syntax

----------
bruintje
share what you know, learn what you don't
0
 

Author Comment

by:HStrix
Comment Utility
Thank you bruintje,
my code looks now as follows:
---
Process MS = new Process();
int tmpErrIntCode = 0;
string tmpErrCatched = "";
try
{
  //Process MS = new Process();
  MS = Process.Start("NET", "USE \\\\" + tmpMyComputer + " /user:" + tmpMyUserID + " " + tmpMyPassword);
  //now you can lookup something that will be of use when looking at the autocomplete
  //MS.
  //you can read its error output or the exit state
  tmpErrIntCode = MS.ExitCode; // <= result = 2 ; where to find exit state?
}
catch (Exception ex)
{
    //do something here
    tmpErrCatched = ex.ToString();  // is not entered
}
finally
{
   //
}
---
Executing the equivalent Net-Use-command leads to error 1385.
I'ld expect this error..

0
 
LVL 44

Expert Comment

by:bruintje
Comment Utility
sorry there is no exit state, i've looked at the thread properties a few weeks ago trying to get better grip on process running through process.start but wasn't able to find a good handle on it [using a third party interface with sendkeys]

you can look at the thread like
using System.Threading;

                Thread myThread = MS.Threads(0);
                myThread. --> use intellisense here

you can even check the threadstate but it will not give you a reason for exit or wait

                myThread.ThreadState = System.Threading.ThreadState.Aborted;

but i can't seem to find something like the exit  reason
0
 

Author Comment

by:HStrix
Comment Utility
So, I can forget this?

Is there a way to use lastdllerror ...

0
 
LVL 44

Expert Comment

by:bruintje
Comment Utility
not sure but looking at the ExitCode

http://msdn2.microsoft.com/en-us/library/system.diagnostics.process.exitcode.aspx

there is something interesting about enable raising events on the process so this way you can wait for the process to exit and check the exitcode, they that in a do loop in the msdn sample it could give you something to have a hold on the process exit state

0
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

Author Comment

by:HStrix
Comment Utility
Thanks, but it seems that there is no exit state either...
and the exit code is still 2.
0
 
LVL 44

Expert Comment

by:bruintje
Comment Utility
exit code 0 is most of the time a normal exit do you have no list of exitcodes for net use

btw if i read this correctly there are no errorcodes for net.exe

http://groups.google.com/group/alt.msdos.batch/browse_frm/thread/61a346ad5331c064/f689bc2efcb2d1c6
0
 

Author Comment

by:HStrix
Comment Utility
Thanks,
my new idea is to read the output of net.exe.
0
 
LVL 44

Expert Comment

by:bruintje
Comment Utility
if it will write to the standard out put you can indeed read it through the MS class
0
 

Author Comment

by:HStrix
Comment Utility
If it is used as a console call the output gets displayed in the console window.

Since this is event controlled(?) there are new thoughts required...
I expect a huge effort because I've never done this before..

0
 

Author Comment

by:HStrix
Comment Utility
For the time-being I use now the following working code
---
try
{
MS.StartInfo.UseShellExecute=false;
MS.StartInfo.RedirectStandardOutput=true;
MS.StartInfo.RedirectStandardError=true;
MS.StartInfo.CreateNoWindow=true;
MS.StartInfo.FileName  = "NET";
MS.StartInfo.Arguments = "USE \\\\" + tmpMyComputer + " /user:" + tmpMyUserID + " " + tmpMyPassword;
MS.StartInfo.WorkingDirectory=WorkingDirectory;
MS.Start();
//
errorNet  = "";
do
  {
    if (!MS.HasExited)
       {
          MS.Refresh();
        }
  }
while (!MS.WaitForExit(1000));
//
errorNet = MS.StandardError.ReadToEnd();
}
catch (Exception ex)
{
  //
}
finally
{
  //
  if (MS != null)
  {
    MS.Close();
  }
  //
  if (errorNet != "")
  {
    // message box
  }
}
---
This code cannot be the final solution,
I think the only way is to create a private class for the net use command.

Your help was welcome and helpful..

0

Featured Post

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Suggested Solutions

In order to hide the "ugly" records selectors (triangles) in the rowheaders, here are some suggestions. Microsoft doesn't have a direct method/property to do it. You can only hide the rowheader column. First solution, the easy way The first sol…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
This video discusses moving either the default database or any database to a new volume.
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now