Fout met Batch-bestand in VB.NET

  • Onderwerp starter Onderwerp starter JoZ1
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

JoZ1

Terugkerende gebruiker
Lid geworden
17 dec 2010
Berichten
3.418
Beste forumgenoten,

Ik ben een programma aan het schrijven dat dat een debug-functie gebruikt.

Het werkt heel simpel: Het programma 'compiled' de uit te voeren code en schrijft deze weg naar Temp. (Het gaat om een Batch-bestand.) Dan opent hij de Batch.

Alles zou moeten werken, maar ik krijg een foutmelding bij de volgende regel code:

Code:
Dim writer As New System.IO.StreamWriter(My.Computer.FileSystem.SpecialDirectories.Temp & "\debug.bat")

Dit is de foutmelding:

Kan de aangevraagde bewerking niet uitvoeren op een bestand met een open door de gebruiker toegewezen sectie.


Maar dit is niet het enige. Ik kan deze Batch namelijk ook niet verwijderen. Dan krijg ik de volgende foutmelding:

Kan geen toegang krijgen tot het bestand C:\Users\Jos\AppData\Local\Temp\debug.bat omdat het wordt gebruikt door een ander proces.

Bij de code:

Code:
 System.IO.File.Delete(My.Computer.FileSystem.SpecialDirectories.Temp & "\debug.bat")
Ik weet welk proces dit is. Dit is AVG. (Free Edition 2011)

Heeft iemand een oplossing voor deze problemen?

(Trouwens, waar zou ik dit moeten posten, in Visual Basic of VB.NET?)
 
Geen idee wat die error is, maar probeer eens tijdelijk een andere locatie, C:\Temp ofzo.
En sluit je je Writer wel af met .Dispose en .Close? Als dat niet het geval is blijft je Writer open staan en krijg je die tweede error.

Wat betreft in welk forum dit zou moeten, ik heb altijd al gevonden dat die twee forums best samengevoegd kunnen worden. Als gebruiker moet je dan wel duidelijk aangeven om welke type VB het gaat (VBA, VB6 of VB.NET).
 
Bedankt voor je reactie!!

Ik sluit hem af met .Close ;).


100% mee eens :thumb:.


Ik zal eens proberen om hem in een andere map te laten opslaan (Ik heb AppData al geprobeerd, zelfde probleem). Ik laat het zo weten....

Edit:

Heel raar. Hij werkt 1 keer (hij maakt dus 1 keer het bestand aan) en een 2e keer werkt hij niet meer. Ik heb het geprobeerd met "C:\Temp\debug.bat"
 
Laatst bewerkt door een moderator:
Ik denk het wel. Dit is namelijk het enige probleem dat ik heb ondervonden. Ik zal het eens met andere bestanden proberen (.TXT's e.d.), misschien wordt het probleem (mede-) veroorzaakt doordat het een Batch-bestand is.

Edit:

Huh!? Het wordt alsmaar gekker! Het werkt prima als ik .TXT i.p.v. .BAT gebruik! Ik snap er echt niets meer van.

Edit 2:

De schuldige is misschien AVG. Ik had al een vermoeden, maar toen zag ik dit topic. Ik heb het Batch-bestand als uitzondering gemarkeerd. En nog werkt het niet! Iemand nog ideeën?
 
Laatst bewerkt:
Het is wellicht handiger om gewoon een test-versie te uploaden, want aan de geposte code is namelijk niks mis. (en onder W7+Security essentials krijg ik dus ook geen foutmeldingen)
 
Hier is-ie dan.

Bedankt iedereen voor de moeite. :D

Code van de 'Test'-Button:

Code:
Try
            Dim code As New RichTextBox
            code.AppendText("@echo off" + vbNewLine)
            code.AppendText("echo Het programma heeft hem goed geopend!" + vbNewLine)
            code.AppendText("echo Probeer het a.u.b. nog een keer. Bij mij zou er dan een foutmelding komen." + vbNewLine)
            code.AppendText("echo." + vbNewLine)
            code.AppendText("echo JoZ1" + vbNewLine)
            code.AppendText("pause")
            Dim writer As New System.IO.StreamWriter("C:\Temp\debug.bat")
            writer.Write(code.Text)
            writer.Close()
            Dim proc As New System.Diagnostics.Process
            proc.Start("C:\Temp\debug.bat")
        Catch ex As Exception
            MsgBox(ex.ToString, 16 + 4096, "De foutmelding :(")
        End Try

Code van de 'Verwijder'-Button:

Code:
 Try
            System.IO.File.Delete("C:\Temp\debug.txt")
            MsgBox("Het is gelukt het bestand te verwijderen!", 64 + 4096, "Test")
        Catch ex As Exception
            MsgBox(ex.ToString, 16 + 4096, "De foutmelding :(")
        End Try

Let op: Klik a.u.b. meerdere keren op de 'Test'-Button. Bij mij werkte hij namelijk eerst een paar keer, voordat ik de foutmelding kreeg.
 
Bedankt! Ik vind het ook heel vreemd. 'k Ben benieuwd of hij ook raar doet op andere systemen.
 
Ik zie dat je een RichtTextBox object aanmaakt en je plaatst er tekst in, maar verder doe je er niks mee, kun je dan niet beter de tekst direct door de Writer laten wegschrijven? Dus zo:

Code:
Try
            Dim writer As New System.IO.StreamWriter("C:\Temp\debug.bat")
            writer.Write( _
"@echo off" + vbNewLine & _
"echo Het programma heeft hem goed geopend!" + vbNewLine & _
"echo Probeer het a.u.b. nog een keer. Bij mij zou er dan een foutmelding komen." + vbNewLine & _
"echo." + vbNewLine & _
"echo JoZ1" + vbNewLine & _
"pause")

            writer.Dispose()
            writer.Close()
            Dim proc As New System.Diagnostics.Process
            proc.Start("C:\Temp\debug.bat")
        Catch ex As Exception
            MsgBox(ex.ToString, 16 + 4096, "De foutmelding :(")
        End Try


En klopt dit wel:
Code:
MsgBox(ex.ToString, 16 + 4096, "De foutmelding :[B](")[/B]
Moet dat niet zo:
Code:
MsgBox(ex.ToString, 16 + 4096, "De foutmelding :[B]")[/B]

EDIT:
Het is nu maandag en ik heb het effe voor je getest.
Om te beginnen kreeg ik een DirectoryNotFound exception omdat de Temp directory in C:\ niet bestond. Die moest ik dus eerst zelf aanmaken.
Daarna klikte ik op de Test knop en kreeg ik netjes een DOS venster te zien met de mededeling dat het programma het batch bestand goed heeft geopend. Bij meerdere klikken op de Test knop kreeg ik steeds een nieuw DOS venster te zien, dus dat lijkt prima te werken.

Alleen de verwijder knop doet het niet. Ik krijg de melding het gelukt is het bestand te verwijderen, maar batch bestand blijft gewoon staan, en ja, ik heb het venster ververst.

Er is dus geen sprake van de "Kan de aangevraagde bewerking niet uitvoeren op een bestand met een open door de gebruiker toegewezen sectie." error op mijn computer.
 
Laatst bewerkt:
Ik zie dat je een RichtTextBox object aanmaakt en je plaatst er tekst in, maar verder doe je er niks mee, kun je dan niet beter de tekst direct door de Writer laten wegschrijven? Dus zo:

Ik denk dat dat niet veel uitmaakt. Er gebeurt dan namelijk hetzelfde. Dat RichTextBox object is alleen voor de duidelijkheid van de code. (Je ziet in één oogopslag om welke tekst het gaat ;))

En klopt dit wel:
Code:
MsgBox(ex.ToString, 16 + 4096, "De foutmelding :(")

Moet dat niet zo:
Code:
MsgBox(ex.ToString, 16 + 4096, "De foutmelding :")

Gewoon een typfoutje :P. Dit is denk ik nog beter:

Code:
MsgBox(ex.ToString, 16 + 4096, "De foutmelding")

Om te beginnen kreeg ik een DirectoryNotFound exception omdat de Temp directory in C:\ niet bestond. Die moest ik dus eerst zelf aanmaken.

Sorry :o, ik dacht dat "C:\Temp" op iedere computer aanwezig was. Ik zal in het vervolg "My.Computer.FileSystem.SpecialDirectories.Temp" gebruiken.

Daarna klikte ik op de Test knop en kreeg ik netjes een DOS venster te zien met de mededeling dat het programma het batch bestand goed heeft geopend. Bij meerdere klikken op de Test knop kreeg ik steeds een nieuw DOS venster te zien, dus dat lijkt prima te werken.

Goed zo! :)

Alleen de verwijder knop doet het niet. Ik krijg de melding het gelukt is het bestand te verwijderen, maar batch bestand blijft gewoon staan, en ja, ik heb het venster ververst.

Dat probleem heb ik opgelost!

Er is dus geen sprake van de "Kan de aangevraagde bewerking niet uitvoeren op een bestand met een open door de gebruiker toegewezen sectie." error op mijn computer.

Bij dit project (met haast identieke 'debug code' als het originele project) heb ik ook geen problemen. Het is ook zo vaag dat Microsoft geen ondersteuning voor deze error biedt.

Ik denk dat ik een andere oplossing heb:

Als ik niet twee keer naar hetzelfde bestand kan schrijven, dan kan ik ook 2 bestanden maken. Bijvoorbeeld: Debug1.bat en Debug2.bat. Als er dan een derde keer wordt geklikt komt er een Debug3.bat.

Ik houd deze oplossing voorlopig niet aan, omdat het niet handig is. Al die bestanden moeten immers ook weer verwijderd worden. Eén bestand blijft het makkelijkste.
 
Sorry voor de dubbelpost, maar ik denk dat het in dit geval overzichtelijker maakt.

Ik heb nu de oplossing van mijn vorige post gebruikt. Dus ik krijg allemaal bestanden als:

Debug_1.bat
Debug_2.bat
etc.

Maar deze kan ik niet verwijderen. Zowel codematig als handmatig. Als ik het codematig doe krijg ik de foutmelding dat het bestand wordt gebruikt door een ander proces.

En als ik het handmatig doe (in de Verkenner dus) krijg ik dit:



AVG is dus de schuldige. Misschien zorgde die ook wel voor de eerste foutmelding (waarvoor ik dit topic startte dus). Iemand een oplossing?
 
Daar valt denk ik weinig/niks aan te doen. Ik zou zeggen neem een andere Antivirus zoals Avira (Gebruik ik zelf ook, werkt prima) maar dat is vast niet de oplossing die je wilt horen...
Of je moet AVG tijdelijk helemaal uitschakelen als je gaat programeren en weer aanzetten als stopt. Dan weet je tenminste zeker of AVG ook de oorzaak is van die eerste foutmelding.
 
Ik zal het zo snel mogelijk even testen zonder AVG. Dan zet ik 'm even uit.

Als ik het heb getest, zal ik een bericht plaatsten. ;)
 
Ik heb AVG uitgezet en heb nog steeds dezelfde foutmelding :(
 
Weet je zeker dat AVG echt helemaal uit is? Dat er dus geen enkel AVG process meer draait? Soms zijn antivirus programma's eigenwijs en starten ze zichzelf weer op nadat je ze uitschakelt.
Check dus effe dat AVG voor 100% is uitgeschakeld. Mogelijk heb je wel de UI of iets dergelijks uitschakeld maar bijvoorbeeld niet een op de achtergrond draaiend process dat letterlijk elk bestand checked voor virussen of andere schadelijke meuk.

Wat je ook kan doen is een virtuele PC opzetten met bijvoorbeeld Virtual Box/, daar VS op installeren en je programma daar verder ontwikkelen.
 
Ik heb een virtuele pc met Windows Vista (zonder AVG!!) opgezet. Hier werkte wel alles prima!

Wat moet ik nu doen? Mensen met AVG (en misschien meerde Antivirus-programma's!) kunnen het nu niet gebruiken.
 
Tsja, dat word lastig. Laat mij eens effe wat proberen. Ik heb ook een virtuele pc met Windows XP erop. Ik zal eens AVG daarop installeren en effe het één en andere proberen.

Geef me een dagje. :)
 
Nou heb effe AVG installed en je programmatje geprobeert. Niks geen probleem, de batch werd netje aangemaakt en uitgevoerd. Verwijderen ging ook goed (Via de verkenner).

Dus tsja, wat het dan wel is... ik zou het niet weten, sorry.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan