|
Hi,
I'm trying to build a more informative error log. Upon encountering an unexpected error, I'd like to get more information about the error to help me pin point its origin.
Specifically I'd like any/all of the following:
The line of code that caused the error
The Event Name, Function, or Sub that caused the error
The module that caused the error.
Thanks.
Ben
|
|
|
|
|
The best you can get is what you see in the StackTrace property of the Exception. You can get the name of the method from the top line of the StackTrace, or you can get it from the .TargetSite.Name property of the Exception. The module name will also come from the .TargetSite , but in its .DecalringType or ReflectedType properties.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Hi there:
As you know we can compile a C Sharp program at DOS prompt like
csc MyProgram.cs
Where MyProgram.cs is the source code file.
Now i want to perform the same compilation through another C Sharp Program. Like i made a program named ShellExecution, which tries to compile another C Sharp Source Code File called "First.cs" lying in my c directory. The program runs fine without any exceptions; it opens the dos window and runs csc, but nothing happens and seems like the file name "First.cs" is not being passed to the csc.exe as a parameter. I have used the following code for executing the compilation process:
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\CSC.exe";
process.StartInfo.Arguments = "C:\\First.cs";
process.StartInfo.UseShellExecute = true;
process.StartInfo.RedirectStandardOutput = false;
process.StartInfo.CreateNoWindow = false;
process.Start();
process.WaitForExit();
Please help me out!!!!
|
|
|
|
|
I don't know if it'll help any but I always use the Start() method by passing the arguments directly into the method call.
<br />
System.Process.Diagnostics.Start("CSC.exe", "C:\First.cs")<br />
Works eveytime for me.
-- modified at 6:14 Friday 25th August, 2006
|
|
|
|
|
I'm trying to delete a directory hierachy that contains a number of read only files, but the Directory.Delete(dirName, true) method throws an exception when it finds one. Is there an option to force it to do so, or a method that can recursively change the file atributes of every file in the folder? If not, iterating the tree and using the File.SetAtributes() method on each file individually would work, but I don't want ot unncessarily reinvent the wheel.
|
|
|
|
|
When I was faced with this same problems, I wrote an app to set the attributes for all files in a directory read to remove the read-only flag, then, I deleted the entire directory tree.
Private Function SetDirectoryTreeAttribute(ByVal sDirectory As String, ByVal lAttributes As FileAttribute) As Boolean<br />
<br />
Try<br />
For Each sFoundFile As String In My.Computer.FileSystem.GetFiles _<br />
(sDirectory, FileIO.SearchOption.SearchAllSubDirectories)<br />
File.SetAttributes(sFoundFile, lAttributes)<br />
System.Windows.Forms.Application.DoEvents()<br />
Next<br />
<br />
Catch ex As Exception<br />
Console.Write(ex.Message.ToString)<br />
Finally<br />
<br />
End Try<br />
<br />
Try<br />
For Each sFoundFile As String In My.Computer.FileSystem.GetDirectories _<br />
(sDirectory, FileIO.SearchOption.SearchAllSubDirectories)<br />
SetDirectoryTreeAttribute(sFoundFile, lAttributes)<br />
Next<br />
<br />
Catch ex As Exception<br />
Console.Write(ex.Message.ToString)<br />
<br />
Finally<br />
<br />
End Try<br />
<br />
End Function
Followed by...
My.Computer.FileSystem.DeleteDirectory (sFoundFile, FileIO.DeleteDirectoryOption.DeleteAllContents)
Hope that helps...
Tim
|
|
|
|
|
With the userform "selction" a filtre a data in a mdb...
After i insert a value similar 4500 in this userform and press selct automaticly the user form "modifiche" show with the data fileterd from selection form, but the code not work?????!!!!!
Note: change path of mdb
For test i have used only a textbox2
Sorry for my terrible English
attached file here:
http://www.mytempdir.com/883741
|
|
|
|
|
Is there any software out there that can compare Vb exes with one another?
|
|
|
|
|
Which version of VB and on what level do you want to compare them?
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Thanks for getting back.
It is VB6.
What I want to know if there is any difference between 2 exes. The sort of thing like, if there has been a update, new compilation etc from the original exe.
Hope this helps, thanks again.
|
|
|
|
|
Is there anything for Vb.Net version 2003 as well?
|
|
|
|
|
Nothing that will compare two .EXE's. You'll have to look at each .EXE and compare them by hand. You can use Lutz Roeder's .NET Reflector[^] to do that.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
VB6? No, there isn't. VB6 compiles directly to a native image format binary. A simple FC compare will tell you that they are different. I'm not aware of any utility that dumps VB specific data out of the .EXE to compare with anything.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
See my test code below (VB .NET 2.0). The Dispatcher is kicking off separate threads of DownloadFileThread which uses the WebClient DownloadFile method to retrieve the files from the web server.
If I watch “c:\test” and keep hitting F5, I see that only two files are ever downloading at the same time. Based on extensive Google searches, I have tried the following, but I still only get 2 downloads at a time:
1. Set "MaxConnectionsPer1_0Server" and "MaxConnectionsPerServer" registry settings to greater than 2
2. Used HttpWebRequest instead of DownloadFile, setting “ServicePoint.ConnectionLimit” to greater than 2
3. Tried upping the “ServicePointManager.DefaultConnectionLimit” to greater than 2
Any help would be greatly appreciated!!
Public Sub Dispatcher()
Const MaxThreads As Integer = 3
Dim DownloadList As New Queue
DownloadList.Enqueue("http://localhost/gdsupdate/bigfile1.cab")
DownloadList.Enqueue("http://localhost/gdsupdate/bigfile2.cab")
DownloadList.Enqueue("http://localhost/gdsupdate/bigfile3.cab")
Dim ThreadList As New Collection
Dim stillWorking As Boolean
Dim CheckingThread As Threading.Thread
Do
'Check to see if it is still running
stillWorking = False
'Loop through the threads to remove those that are finished
For ThreadIdx As Integer = ThreadList.Count To 1 Step -1
CheckingThread = ThreadList.Item(ThreadIdx)
If CheckingThread.ThreadState = Threading.ThreadState.Aborted Or _
CheckingThread.ThreadState = Threading.ThreadState.Stopped Then
ThreadList.Remove(ThreadIdx)
Else
stillWorking = True
End If
Next
'Add more items to the threads if there is room and more to process
For ThreadIdx As Integer = (ThreadList.Count + 1) To MaxThreads
If DownloadList.Count = 0 Then Exit For
CheckingThread = New Threading.Thread(AddressOf DownloadFileThread)
ThreadList.Add(CheckingThread)
CheckingThread.Start(DownloadList.Dequeue)
stillWorking = True
Next
'Continue looping until all are completed
Loop While stillWorking
End Sub
'Thread must be a sub with 1 object as param (type must be object), or no param
Friend Sub DownloadFileThread(ByVal InputFile As Object)
Dim SourceURL As String = InputFile
Dim FileName As String = System.IO.Path.GetFileName(SourceURL)
Dim ToTarget As String = System.IO.Path.Combine("c:\test", FileName)
Dim theWeb As New System.Net.WebClient
theWeb.DownloadFile(SourceURL, ToTarget)
End Sub
|
|
|
|
|
Hi
I have installed a windows service successfully and it runs ok. When I attach to the process in order to debug it, and try setting breakpoints, I get the following message:
"The breakpoint will not currently be hit. No symbols have been loaded for this document"
Has anyone come across this before (and found a solution )?
Thanks
KevinSheedy
|
|
|
|
|
|
I have some source code written in c# but as I am a VB.NET programmer I need a little guidance in the translation.
Firstly would the following C# code snippet...
[Serializable]<br />
public class Employee
translaste to VB.NET as...
<Serializable> Public Class Employee()
Secondly
How would this translate from C# to VB.NET?
public class EmployeeCollection : ArrayList
Thanks
Steve Jowett
|
|
|
|
|
Just use this link
http://www.kamalpatel.net/ConvertCSharp2VB.aspx
for converting C# code to VB.net code
Balasaheb
Software Developer
Platform: Asp.net,vb.net
Database: SQL Server 2000
|
|
|
|
|
Wow, that is one excellent and extremely ussful website. Thanks for the referal, it's now in my favorites
Steve Jowett
|
|
|
|
|
For those reading this thread, the translation is:
Public Class EmployeeCollection
Inherits ArrayList
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
hi,
im trying to parse some specific information from a VB6 app to a VB.Net app.
Currently im using the API function SendMessage with the WM_COPYDATA message to try to transfer a object containing my specific information.
Currently im able to catch the message in my VB.Net app, but im not able to extract the information.
In both applications i have defined a type to hold the specific information, defined like so:
VB6:
Public Type sagdata
sagid As String
End Type
VB.Net:
<StructLayout(LayoutKind.Sequential)> _
Public Class SagData
Public sagid As String
End Class
The Declaration and sending of message in VB6:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private sub blabla
Dim sagdat As sagdata
sagdat.sagid = "qwerty"
Call SendMessage(hwndTarget, WM_COPYDATA, 0, sagdat)
end sub
VB.Net code that gets the information from the message:
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
.
.
.
Dim ExData As SagData
ExData = CType(m.GetLParam(GetType(SagData)), SagData)
dim message as string = Marshal.PtrToStringAuto(cds.sagid, cds.sagid)
.
.
the second last line where i try to assign ExData is where i'm stuck at now.
I get an exception that reads:
The runtime has encountered a fatal error. The address of the error was at 0x7a0baa07, on thread 0x3c4. The error code is 0xc0000005. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack.
Im pretty sure that either my data type difinition in VB.Net is lacking something, or the way im trying to extract from the message is totally wrong.
Any tips are welcome.
-- modified at 10:11 Thursday 24th August, 2006
|
|
|
|
|
You can find out more about the technique here[^].
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Hi Dave,
I had actually already looked at this, but i was not able to make it work properly.
Also that example seems overly complex, using channels and what not.
My main problem was that i ran into the same problem as i do now, which is when im trying to get the information via the WM_COPYDATA message i get an exception about memory address.
|
|
|
|
|
Ok i can see i had made some mistakes in my code. the structure passed has to be a certain type. I've changed this to
'VB6
Private Type COPYDATASTRUCT
dwData As Long ' ID for this msg
cbData As Long ' number of bytes
lpData As Long ' address of data
End Type
'VB.Net
<System.Runtime.InteropServices.StructLayoutSystem.Runtime.InteropServices.LayoutKind.Sequential)> _
Private Structure COPYDATASTRUCT
Public dwData As IntPtr
Public cbData As Integer
Public lpData As Integer
End Structure
My code when sending the message from VB6 is now:
Dim s As String
s = "hello"
Dim cds As COPYDATASTRUCT
cds.dwData = 1
cds.cbData = LenB(s)
cds.lpData = StrPtr(s)
Call SendMessage(hwndTarget, WM_COPYDATA, 0, cds)
and my code when handling the message in .NET is still abit uncertain
i can get some of the string but i also get some garbage along with it.
Dim cds As COPYDATASTRUCT = New COPYDATASTRUCT()
cds = Marshal.PtrToStructure(m.LParam, cds.GetType())
Dim s As String = Marshal.PtrToStringUni(cds.lpData, cds.cbData)
when running this code s becomes:
"hello聎鏆矔鎅矔"
anyone know why?
-- modified at 4:47 Monday 28th August, 2006
|
|
|
|
|
hmmm
If i divide the value
cds.cbData
by 2, i get the string i want each time.
I dont know why exactly, and would really love an explanation.
|
|
|
|