Hallo Leute... Ich habe eine Frage zu Visual Basic (Ich benutze Visual Studios 2012 Express). Und zwar habe ich folgendes Problem. Ich erstelle beim Starten eine Datei die dazu dient, dass wenn das Programm gestartet ist, dass man es nicht nocheinmal starten kann... Hier einmal mein Code: (der der Fehlerhaft ist... -.-)
Der Fehler passiert nur wenn ich im CMD das Programm mit argumenten starte. Nicht beim Start dierekt, sondern wenn das Programm beginnt sich zu schließen. Z.B. sieht das im CMD so aus:
C:\Users\%USERPROFILE%\Desktop>Leaders4Fun.exe /?
Dann funktioniert auch alles. Es wird mein Benutzer ausgegeben, Zeit und die befehle. Aber sobald ich auf "OK" Klicke kommt folgende Meldung:
Ich habe versucht sie im Explorer zu löschen, bekomme dann die meldung das sie von vshost32.exe benutzt wird (Ist doch VS2012E oder nicht?).
Wenn ich das Programm von der .exe und nicht über VS2012E starte bekomme ich diese Meldung (bei den selben Argumenten):
Die 2. Meldung kommt 2 mal und dann meine normale Form. Allerdings kommt dann sofort die Meldung "Leaders4Fun.exe funktioniert nicht mehr."
Ich bitte um hilfe Ich weiß einfach nicht mehr weiter und weiß nicht wie ich das sonst machen soll...
Ich hoffe ihr könnt mir meinen ersten Post (Gramatikalisch und Rechtschreib mäßig) verzeihen und Ich hoffe das ich das in einem Richtigen Thread gepostet habe.
Vielen Dank und liebe Grüße von
KenJy
VB.NET-Quellcode
- Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
- If IsRunning = True Then
- If File.Exists(Application.StartupPath & "\LOCK") Then
- File.Delete(Application.StartupPath & "\LOCK")
- End If
- End If
- MsgBox("Finished ^^") 'Dient NUR zur Überprüfung weil ich nicht weiter wusste...
- End Sub
- 'Internet Checken und Update downloaden
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- If File.Exists(Application.StartupPath & "\LOCK") Then
- If MessageBox.Show("Das Programm ist bereits ausgeführt worden!" & vbCrLf _
- & "Bitte schließen sie die ausgeführte Anwendeung," & vbCrLf _
- & "um eine neue zu starten.", "Das Programm Läuft schon." _
- , MessageBoxButtons.OK, MessageBoxIcon.Warning) = Windows.Forms.DialogResult.OK Then
- Me.Close()
- End If
- Me.Close()
- Else
- File.Create(Application.StartupPath & "\LOCK")
- IsRunning = True
- End If
- IsRunningCheck()
- Control.CheckForIllegalCrossThreadCalls = False
- panelloc.Y = "-210"
- panelloc.X = "289"
- panelClock.Location = panelloc
- panelClock.Visible = True
- Exit Sub
- End Sub
- 'Internet Checken und Update Info geben
- Private Sub IsRunningCheck()
- If IsRunning = True Then
- Argchecknow()
- End If
- End Sub
- Private Sub Argchecknow()
- Dim args As String()
- args = Environment.GetCommandLineArgs()
- 'bei 1 starten, weil das Programm IMMER seinen eigenen
- 'FULLPATH als ersten Parameter erkennt!
- For i As Integer = 1 To args.Length - 1
- Select Case args(i).ToLower
- Case "/?", "/help", "/info"
- MessageBox.Show("Your computer name: " & My.Computer.Name & vbCrLf _
- & "Date and Time: " & Now & vbCrLf _
- & "Known args: " & vbCrLf _
- & "/? /help /info" & vbCrLf _
- & "/media" _
- , "", MessageBoxButtons.OK, MessageBoxIcon.Information)
- Me.Close()
- Case "/media"
- For i2 As Integer = 2 To args.Length - 1
- Player.WMPlayer.URL = args(i2)
- Player.ListBox1.Items.Add(Path.GetFileName(args(i2)))
- Player.ListBox2.Items.Add(args(i2))
- Next
- Me.Visible = False
- Me.ShowInTaskbar = False
- 'Player.FromArg = True
- Player.Show()
- Case Else
- End Select
- Next
- AllINet.Start()
- Exit Sub
- End Sub
Der Fehler passiert nur wenn ich im CMD das Programm mit argumenten starte. Nicht beim Start dierekt, sondern wenn das Programm beginnt sich zu schließen. Z.B. sieht das im CMD so aus:
C:\Users\%USERPROFILE%\Desktop>Leaders4Fun.exe /?
Dann funktioniert auch alles. Es wird mein Benutzer ausgegeben, Zeit und die befehle. Aber sobald ich auf "OK" Klicke kommt folgende Meldung:
Ich habe versucht sie im Explorer zu löschen, bekomme dann die meldung das sie von vshost32.exe benutzt wird (Ist doch VS2012E oder nicht?).
Wenn ich das Programm von der .exe und nicht über VS2012E starte bekomme ich diese Meldung (bei den selben Argumenten):
Quellcode
- Unbehandelte Ausnahme in der Anwendung. Klicken sie auf "Weiter"
- un den Fehler zu ignorieren und die Anwendung fortzusetzen. Wenn Sie
- auf "Beenden" klicken, wird die Anwendung sofort beendet.
- Der Prozess kann nicht auf die Datei
- "G:\Programme\Pfad\zum\Programm\bin\Debug\
- LOCK" zugreifen, da sie von einem anderen Prozess verwendet wird.
- Details:
- Informationen über das Aufrufen von JIT-Debuggen
- anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.
- ************** Ausnahmetext **************
- System.IO.IOException: Der Prozess kann nicht auf die Datei "G:\Programme\Pfad\zum\Programm\bin\Debug\LOCK" zugreifen, da sie von einem anderen Prozess verwendet wird.
- bei System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
- bei System.IO.File.InternalDelete(String path, Boolean checkHost)
- bei System.IO.File.Delete(String path)
- bei Leaders4Fun.Form1.Form1_FormClosing(Object sender, FormClosingEventArgs e) in G:\Programme\Pfad\zum\Programm\Form1.vb:Zeile 152.
- bei System.Windows.Forms.Form.OnFormClosing(FormClosingEventArgs e)
- bei System.Windows.Forms.Form.WmClose(Message& m)
- bei System.Windows.Forms.Form.WndProc(Message& m)
- bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
- bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
- bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Die 2. Meldung kommt 2 mal und dann meine normale Form. Allerdings kommt dann sofort die Meldung "Leaders4Fun.exe funktioniert nicht mehr."
Ich bitte um hilfe Ich weiß einfach nicht mehr weiter und weiß nicht wie ich das sonst machen soll...
Ich hoffe ihr könnt mir meinen ersten Post (Gramatikalisch und Rechtschreib mäßig) verzeihen und Ich hoffe das ich das in einem Richtigen Thread gepostet habe.
Vielen Dank und liebe Grüße von
KenJy
Bellum et Pax.
Omne initium est difficile.
Omne initium est difficile.
-KenJy ;D