2009-06-09 11 views
0

Récupération d'un projet VB.NET hérité écrit à l'origine pour la version 1.1 du framework .NET. Je cours Vista avec .NET 3.5. J'ai éliminé toute l'erreur initiale et le projet va se construire; ça ne fonctionnera pas. Pour autant que je sache, il essaye d'exécuter 'LoginForm' mais mettre des points d'arrêt ne fonctionne pas parce que l'erreur est levée avant que les points d'arrêt soient atteints, quel que soit l'endroit où ils sont placés.IndexOutOfRangeException dans VB.NET

Vraiment ne peut pas savoir quoi faire! Toute aide appréciée.

StackTrace:

 
System.IndexOutOfRangeException was unhandled 
    Message="Index was outside the bounds of the array." 
    Source="FirstLine" 
    StackTrace: 
     at FirstLine.LoginForm.main() 
     at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: 

EDIT: Terriblement désolé, n'a pas apprécié le code serait d'une grande utilité parce que la question est plus que je ne peux pas y accéder. Cependant, voici la fonction principale:

 
Shared Sub main() 
     Dim p As Process() = Process.GetProcessesByName("FirstLine") 
     If p.Length = 1 Then 
      'START COPYMINDER 
      'Dim expirydate As Date = CDate("01/01/1970") 
      'Dim expiry As Integer 
      'Try 
      ' GetCopyMinderExpiryDate(expiry) 
      ' If Not expiry = 0 And Not expiry = 1 Then 
      '  expirydate = expirydate.AddSeconds(expiry) 
      '  Dim diff As Integer = DateDiff(DateInterval.Day, Date.Now, expirydate) 
      '  If diff >= 0 And diff 0 Then 
      ' DisplayError((ret_code)) 
      ' End 
      'End If 

      'Dim did As String 
      'GetCopyMinderDeveloperID(did) 
      'If did "IT" Then 
      ' MessageBox.Show("Invalid Developer ID " & did & ". Firstline will now shutdown", "Firstline", MessageBoxButtons.OK, MessageBoxIcon.Error) 
      ' End 
      'End If 

      'END COPYMINDER 


      Dim lf As New LoginForm 
      If LoginSettings.setting("loginShowErrorOnLine") = "TRUE" Then 
       lf.ShowDialog() 
      Else 
       Try 
        lf.ShowDialog() 
       Catch ex As Exception 
        MsgBox(ex.Message) 
        Config.UnlockByUser(Config.currentUser.username) 
        Config.currentUser.UserLoggedOff() 
       End Try 
      End If 
     Else 
      Dim prc As Process = p(0) 
      SwitchToThisWindow(prc.MainWindowHandle, True) 
     End If 

    End Sub 

Merci pour vos réponses à ce jour. C'est encourageant de voir une communauté si utile!

+0

Publier du code. Qu'y a-t-il dans LoginForm.main()? En attendant, cela pourrait aider: http://stackoverflow.com/questions/964566/vs-2008-addon-to-temporarily-disable-remove-all-catch-block/964579#964579 –

+0

Un code source de la FirstLine .LoginForm.main() serait probablement utile :-). – bang

Répondre

0

Essayez d'activer la version de débogage; cela vous donnera la possibilité d'ajouter des points d'arrêt et vous donnera également des numéros de ligne à la trace de la pile.

Votre problème est que vous ne gérez pas le cas où p.Length = 0. Cela se produit s'il n'y a pas de processus portant le nom "FirstLine".

Avez-vous également renommé votre processus/application?

+0

Pas vraiment eu un arrière-plan .NET donc je ne savais pas que je pourrais rendre les erreurs plus descriptives! Je vais essayer ça maintenant. Merci beaucoup! –

+0

Il suffit de lire les processus sous le framework .NET. Je reviendrai à toi une fois que je l'aurai fait. Jusqu'à présent, j'ai mis un elseif p.length = 0 et puis je suppose que je viens de commencer un nouveau processus? Je pense que c'est vrai. Merci beaucoup pour votre aide, c'est très apprécié! –

4

Dim prc As Process = p(0) est votre problème car il est dans les instructions else où la longueur du tableau peut être tout sauf 1 (0 par exemple).

lorsque la longueur est égale à 0, vous obtiendrez IndexOutOfRange lorsque vous essaierez d'accéder au premier élément.

+0

Vous avez tout à fait raison! Je suppose que ma question serait pourquoi ne réagit-elle pas aux points de rupture? Il exécute définitivement ce code (console.writeline donne la sortie) mais semble ignorer complètement les points d'arrêt. Excuses si c'est une question stupide = / –