|
Thanks OriginalGriff,
I coded the foloowing :
<code>
processInfo = new ProcessStartInfo("cmd.exe", "/C " + command);
sb = new StringBuilder();
processInfo.UseShellExecute = false;
processInfo.RedirectStandardOutput = true;
processInfo.CreateNoWindow = true;
process = Process.Start(processInfo);
process.BeginOutputReadLine();
process.OutputDataReceived += new DataReceivedEventHandler(Process_OutputDataReceived);
public string ErrorMessage
{
get { return errorMsg; }
set { errorMsg = value; }
}
private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
errorMsg = "";
connected = false;
string d = e.Data;
if (!string.IsNullOrEmpty(d))
{
if (sb != null)
sb.Append(d + "\n");
Console.WriteLine("LINE = " + d); // I see each line
if (d.IndexOf("Initialization Completed") > 0)
{
connected = true;
Console.WriteLine("********* Connected = " + connected);
}
else if (isInValidLine(d))
{
//throw new Exception(d);
connected = false;
errorMsg = d;
return;
}
}
}
private bool isInValidLine(string line)
{
if (line.IndexOf("Cannot load file") > 0)
{
errorMsg = line;
return true;
}
return false;
}
</code>
The output that I see is :
LINE = Thu Feb 03 17:22:28 2011 Cannot load file path (null) (SSL_CTX_load_verify_locations): error:02001002:system library:fopen:No such file or directory: error:2006D080:BIO routines:BIO_new_file:no such file: error:0B084002:
Based on the above code and output, isInValidLine() should find the text "Cannot load file" and errorMsg should be set to the line and it should return true.
My Implementation :
<pre>
while (!oc.Connected)
{
timepassed = (int)(DateTime.Now - start).TotalMilliseconds;
if (timepassed > timeout)
{
oc.DisconnectServer();
connectedToVpn = false;
throw new Exception("NotConnectedException");
} else if (oc.ErrorMessage.Length > 0)
{
oc.DisconnectServer();
connectedToVpn = false;
throw new Exception(oc.ErrorMessage);
}
Thread.Sleep(100);
}
</pre>
checks for if (oc.ErrorMessage.Length &gt; 0), but the value of errorMsg is always "". Why so ?
Where am I going wrong or doing something invalid that the code seems to never check for isInvalid() method only ? I tried adding the same lines of isinvalid() in the place it is called, but yet no differnce.
Where am I going wrong that the Process_OutputDataReceived never sets and errorMsg via isInvalid() ? Please help me get my mistake and rectify it. Badly stuck up at this location.
Thanks & Regards,
|
|
|
|
|
I can't see anything too obvious with the code as it stands (but remmebr to check the "use HTML in this post" option at the bottom, and use "code block" rather than "inline code" next time).
If you are getting the line printed - and it appears you are - then it isn't obvious what is happening.
Have you tried putting a breakpoint at the start of Process_OutputDataReceived and stepping through?
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together.
Digital man: "You are, in short, an idiot with the IQ of an ant and the intellectual capacity of a hose pipe."
|
|
|
|
|
Hmm, the class that handles the conection is in a library. When i added break in Process_OutputDataReceived (before execution & while execution), the app doesn't print any Line on Console. I removed the break and tried again then it showed the LINE = on console.
How to add breakpoint in a library class whose dll is included in main project. While degbuging the dll class comes normally and does the debugging.
How to handle this ? Is it due to the class is in a library ?
Thanks & Regards,
|
|
|
|
|
All Time Programming wrote: When i added break in Process_OutputDataReceived (before execution & while execution), the app doesn't print any Line on Console. I removed the break and tried again then it showed the LINE = on console.
That implies it hit the breakpoint - did you try switching to VS and looking at the library code where you put the BP?
I tried your code on my machine - using "dir" as the command, and a file size and date for the comparison - and it worked fine. You need to look at the data you are comparing against, I think: are those really spaces for example?
Or: are you using the release version of the library in the app, and modifying the debug version?
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together.
Digital man: "You are, in short, an idiot with the IQ of an ant and the intellectual capacity of a hose pipe."
|
|
|
|
|
>> Or: are you using the release version of the library in the app, and modifying the debug version?
What do you mean ? I change the code in library and build it. The reference is added in main application. I build the main app, which updates the dll file and I execute the application. I checked the dll file date/time in main app, its of Release version of library. The library & app is in Release version.
Should they be in Debug version ? How to change them ?
The spacing must not be a problem as I copy from the output only and put in my if to look for indexOf.
But yes, I think that applying BP on 1st line of Process_OutputDataReceived while execution helps. It got the "Cannot load file..." line and it went in isInvalid, went inside that if, changed "connected = false", and for the next line
else if (isInValidLine(d))
{
connected = false;
errorMsg = d;
return;
}
private bool isInValidLine(string line)
{
if (line.IndexOf("Cannot load CA certificate file") > 0)
{
errorMsg = line;
return true;
}
return false;
}
i GUESS i GOT TO debug more carefully. AND should I remove & add refernce everytime I buid the library ?
Thanks & Regards,
|
|
|
|
|
If your library is part of the same solution as your app, then they will both be Release or Debug together: Normally I have separate solutions, and issue the release version of a library for apps to use, while I continue changes in the debug version. In your case, that doesn't apply!
If you mean that errorMsg remained empty after executing the code, could it be that the next line to be received (whether it is blank or not) starts off by setting errorMsg = ""; perhaps? Move your Console.WriteLine to immediately before the first if and see what happens.
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together.
Digital man: "You are, in short, an idiot with the IQ of an ant and the intellectual capacity of a hose pipe."
|
|
|
|
|
 Both are of different solutions.
But yes, realized during debugging & removed the errorMsg = "" & connected = false lines. And now I see that errorMsg has value in it.
Implementaion PART :
try
{
StartConnect();
}
catch (ThreadAbortException te)
{
Console.WriteLine("Abort Exception CAUGHT");
}
catch (Exception ex)
{
string msg = ex.Message;
if (msg.Equals("NotConnectedException"))
MessageBox.Show("Error connecting to the Server : Connection Time Out \n Unable to connect to the Server", "Time Out", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
else if (msg.IndexOf("Cannot load CA certificate file") > 0)
MessageBox.Show("Error connecting to the Server : Problem with Certificate File \n Unable to Load or Find required Certificate file.", "Failed to Connect", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
else if (msg.IndexOf("Error opening 'Auth' auth file:") > 0)
MessageBox.Show("Error connecting to the Server : Problem with Authentication File \n Unable to Load or Find required Authentication file.", "Failed to Connect", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
else if (msg.IndexOf("Error opening configuration file:") > 0)
MessageBox.Show("Error connecting to the Server : Problem with Configuration File \n Unable to find required Configuration file.", "Failed to Connect", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
else
MessageBox.Show("Error connecting to the Server : \n " + msg, "Failed to Connect", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
finally
{
}
Console.WriteLine("Execution Completed ");
private void StartConnect()
{
DateTime start = DateTime.Now;
int timeout = 100000, timepassed = 0;
oc = new OpenConnect(cmd, timeout);
int retVal = oc.ConnectToServer();
while (!oc.Connected)
{
timepassed = (int)(DateTime.Now - start).TotalMilliseconds;
if (timepassed > timeout)
{
oc.DisconnectServer();
connectedToVpn = false;
throw new Exception("NotConnectedException");
} else if (oc.ErrorMessage.Length > 0)
{
Console.WriteLine("ERROR MESAGE = " + oc.ErrorMessage);
oc.DisconnectServer();
Console.WriteLine("DISCONNECTED");
connectedToVpn = false;
throw new Exception(oc.ErrorMessage);
Console.WriteLine("THROWN");
}
Thread.Sleep(100);
}
return;
}
iT THROWS "NotConnectedException" exception when the time is over.
The OUTPUT :
LINE = Thu Feb 03 19:07:10 2011 Cannot load CA certificate file........
ERROR MESAGE = Thu Feb 03 19:07:10 2011 Cannot load CA certificate file ......
LINE = Thu Feb 03 19:07:10 2011 Exiting
DISCONNECTED
/// SEE MSGBOX OF TIME OUT I.E. OF NotConnectedException
Execution Completed
Why it doesn't throw that exception of error message ?
I ran without debugging also, increased the timeout duration, yet it waits hlds itself and throws Time out Exception only.
What can be the problem for this ?
Thanks & Regards,
|
|
|
|
|
Reply: it is.
If it wasn't, then your output would contain the line: "THROWN" from the following statement.
Best guess: You are swallowing or ignoring the exception at a higher level.
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together.
Digital man: "You are, in short, an idiot with the IQ of an ant and the intellectual capacity of a hose pipe."
|
|
|
|
|
YES, then it should have printed "THROWN".
>> Best guess: You are swallowing or ignoring the exception at a higher level.
Didn't get you. Can you please explain it or show proper guideline to modify accordingly.
Thanks & Regards,
|
|
|
|
|
You see the code of StartConnect. I think and hence wanted to add StartConnect() in a thread and catch exceptions like that, but it didn't work out.
Is it better to handle it in thread (the code that's commented) or as I have dneo is correct. If the commented is correct, then how to trap exceptions that are thrown by StartConnect or not to throw exceptions and handle them in that method only.
Please guide me for this also. I am on this issue from last 3 days, on many trials couldn't suceed. Your points are helping to suceed. Thanks a lot. I highly appreciate it. Please keep helping on this issue and help me run the code normally to its and yours best.
Thanks & Regards,
|
|
|
|
|
From looking briefly at your code, I think you first need to read up on threads before you try moving the code: you don't seem to understand what you are trying to do and the effects it has on execution.
Read up first, and get your head round it. Then try it, and if you have problems, post a new question!
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together.
Digital man: "You are, in short, an idiot with the IQ of an ant and the intellectual capacity of a hose pipe."
|
|
|
|
|
Truly telling I read Threading tutorials of C#, but not getting such ways of threading. I mean calling method in it and such.
I get threading of Java & C++ nicely, but C# can't get in mind properly.
If StartConnect is in a Thread, it cannot throw exceptions. If adding such type of code in a thread is best practice, then how to accomplish such activity as I have done. If I am wrong in my this thought, please tell me.
Without putting in thread (the current situation), its working proper & also showing exception of cannot find file only. Thanks a lot for this. Please if you can help with the above also would be great. Atleast guide, I am not asking for written code. As said, this type of threading doesn't fit proeprly in my mind, so need assistance.
Thanks & Regards,
modified on Thursday, February 3, 2011 9:38 AM
|
|
|
|
|
Maybe this[^] is what you want.
|
|
|
|
|
Hello
I'm developing a project with C# 2010.
I want to set paper size and layout programmatically.
But it doesnt work properly.
There is no usefull document at the web.
Regards
|
|
|
|
|
Please be specific.
Let us know what you have tried with a piece of code and what error you got.
Praveen Raghuvanshi
Software Developer
|
|
|
|
|
Thank you.
I created my Report and i can see it at run time, But for printing, everytime user should open printer settings and change the paper size.
i want to set paper size at design time and print the report programmatically.
I wrote below code (doesnt work):
this.reportViewer1.PrinterSettings.DefaultPageSettings.PaperSize.Height = 1169;
this.reportViewer1.PrinterSettings.DefaultPageSettings.PaperSize.Kind = PaperKind.A4Extra;
this.reportViewer1.RefreshReport();
Also i couldn't find PrintReport option for ReportViewer.
|
|
|
|
|
Hi Experts,
there is a control derived from System.Windows.Forms.Panel that I can drop things on. The panel shows a representation of what was dropped onto it. Further, I can drag things around on that panel, moving the representation in the process.
Now I have to change that behaviour in such a way, that representations get created OnDragEnter. Customers shall move things around without having to drop them and grab them again.
Now my problem is that OnMouseMove doesn't fire during drag'n'drop operation. Therefore, panel creates a representation OnDragEnter, but refuses to move it around until user releases the left mouse button.
Does anyone know of a solution for that problem?
Can I abort a drag'n'drop operation (there's no drgevent.Cancel)?
Ciao,
luker
-- Modified Friday, February 4, 2011 6:17 AM
|
|
|
|
|
Would this[^] help with the drag image?
There's a DragAction.Cancel property. Any good?
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
I wouldn't let CG touch my Abacus!
When you're wrestling a gorilla, you don't stop when you're tired, you stop when the gorilla is.
|
|
|
|
|
Since DragAction.Cancel belongs to
protected void OnQueryContinueDrag(QueryContinueDragEventArgs e) , which is overridable, I can at this point find out, wheter to continue the drag operation and this works as expected.
Thanks a lot.
Ciao,
luker
|
|
|
|
|
hey guys..i have a bound datagridview in my form and i have two DataGridViewButtonColumn(Edit and Delete)...and the user can add new row..the problem is i want the DataGridViewButtonColumn to be seen as Insert and Cancel instead of Edit and Delete...after inserting process completed it must be seen like other datas..thanks for help
vemedya.com
|
|
|
|
|
erdinc27 wrote: after inserting process completed it must be seen like other datas
Not exactly sure what you mean by this, but, it sounds like perhaps you should use a TemplateColumn and adjust the button controls as required.
I know the language. I've read a book. - _Madmatt
|
|
|
|
|
hii Mark thanks for reply.. i am searching that u suggested...here the pic what i mean..i mean when i have empty row as in pic the buttons' text must be seen as Add and cancel instead of Update and Delete...and after the user click Add button the row will be added(here no problem) and the button's text must be seen like Update and Delete..like the other buttons..i hope it is more clear now..thanks for help again
vemedya.com
|
|
|
|
|
Handle the RowDataBound or RowCreated event and update the button text appropriately.
I know the language. I've read a book. - _Madmatt
|
|
|
|
|
i couldnt find both events that u suggested...i have UserAddedRows and RowsAdded..i tried both
private void datagridview1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
datagridview1.CurrentRow.Cells[6].Value = "Insert";
}
i cant catch Text Property here..that is why i used Value property but it gives error like "Object reference not set to an instance of an object."
so what else i can try ?
vemedya.com
|
|
|
|
|
hi again.. thanks for help and your time..i solved my problem like below.in my button's click event that i create new row
int rowCount = datagridview1.Rows.Count;
DataGridViewButtonCell buttonCell = (DataGridViewButtonCell)datagridview1.Rows[rowCount].Cells[6];
buttonCell.UseColumnTextForButtonValue = false;
buttonCell.Value = "Insert";
vemedya.com
|
|
|
|