Code runs with no errors until the "Send Error Report To Microsoft" comes up
I have some vb.net code which should print out labels using Teklynx LabelView software (which I've had working before.)
Problem is, it runs fine on Dev machine, but when I run it on the end user's PC, I don't get any error messages until it completely dies with the "Send error report to Microsoft" message.
How can I troubleshoot this???
Relevant code:
Shared Function PrintLabels(ByVal itemDescription As String, ByVal starting As String, ByVal ending As String, ByVal qty As Integer) As Boolean
'Create "Document" (Label) object
'Close all open lv.exe processes
Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("lv")
For Each p As Process In pProcess
p.Kill()
Next
Dim Lbl As Object
Lbl = CreateObject("Lblvw.Document")
Lbl.Open(labelFileName)
Dim barcodeVal As String
Dim labelText As String
Try
Dim infoArray As String()
infoArray = itemDescription.Split(New Char() {","c})
labelText = infoArray(1).ToString().Trim()
barcodeVal = infoArray(2).Trim() & starting & ending
'Load label in ReadOnly mode
Lbl.Open(labelFileName, True)
'Get field information
Dim Flds As Object
Flds = Lbl.LabelFields
Flds.Item("TEXT1").Value = labelText
Flds.Item("BARCODE1").Value = barcodeVal
Lbl.PrintLabel(qty)
Lbl = Nothing
barcodeVal = Nothing
labelText = Nothing
Return True
Catch ex As Exception
If printStatements Then
MsgBox("Error Message: " & ex.Message.ToString())
End If
Using writer As New StreamWriter(errorLog, True)
writer.AutoFlush = True
writer.WriteLine()
writer.WriteLine(DateTime.Now.ToString() & ": " & ex.Message)
End Using
Lbl = Nothing
barc开发者_运维问答odeVal = Nothing
labelText = Nothing
Return False
End Try
End Function
Check what version of .NET you are building to and what version of .NET the client has on their machine.
Something you are using might not be back compatible with the user if the user has a lesser version of .NET.
Don't guess at this. Implement the AppDomain.CurrentDomain.UnhandledException event and log or display the value of e.ExceptionObject.ToString(). It tells you exactly what went wrong, with a stack trace to show you how to wrongness came to be.
In addition to the .NET version as @Jack mentions, be aware of 32-bit vs 64-bit. If the label software is built for 32-bit only, your program won't run if you're targeting "Any CPU" in Visual Studio and you're running it on a 64-bit machine. In this case, the CLR will compile to 64-bit and then won't be able to link to the 32-bit library. (But without knowing the software, I don't know if this is affecting you.)
Sounds like you have to properly install the Teklynx LabelView component. If it's a COM component (you did tag this question with "OLE" and you are using CreateObject), it'll require a registry entry. Copying and pasting the bin\ won't work. What does the Teklynx documentation say about redistributing the component? I've never had to register a COM component in .NET ... only back in VB6 which the Setup & Deployment Wizard handled. For testing, find a clean client PC and use regsrv32.exe to manually register the Teklynx .DLL(s).
Looks like its a different version of the Teklynx LabelView software. This code worked previously on v7 Gold edition, but at some point it was upgraded to v8.5 Pro edition, which does not support OLE Automation. Looking at upgrading to Gold to confirm that this is indeed the problem.
UPDATE: Yes, this was the problem. Thanks all!
精彩评论