Avatar billede websam Nybegynder
08. juli 2004 - 15:18 Der er 17 kommentarer og
1 løsning

Checke om der ligger .bat fil i mappe ?

Hejsa,

Er der en der kan hjælpe mig med at få lavet en sub/function der kan checke om der ligger en .bat fil i en mappe og hvis der gør exekvere filen ?

Det skal køre som en service på en server og jeg har lavet noget som virker blot for at se om det var muligt at få en service op og stå koden skriver cpu belastning til en tekst fil og ser ud som følger :

Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed
    Dim File As TextWriter = New StreamWriter("C:\output.txt", True)
    File.WriteLine("CPU Usage : " & PerformanceCounter1.NextValue.ToString & " - " & Now)
    File.Close()
End Sub

Jeg ved ikke om det hjælper ?

/Websam
Avatar billede arne_v Ekspert
08. juli 2004 - 20:05 #1
If File.Exists("C:\foobar.bat") Then
    Process.Start("C:\foobar.bat")
End If

File er i System.IO

Process er i System.Diagnostics

Og det her var selve koden. Adgang og andre sikkerheds aspekter må du spørge
mere ASP.NET kyndige end mig om.
Avatar billede websam Nybegynder
08. juli 2004 - 21:11 #2
Ok det ser rimiligt simpelt ud jeg har dog lige glemt en enkelt vigtig ting (sorry) Det skal helst være sådan at den kan tjekke på hvilken som helst .bat fil uanset navn altså noget i stil med :

If File.Exists("C:\*.bat") Then
    Process.Start("C:\*.bat")
End If

Og ikke nok med det hvis der ligger 3 filer f.eks tester.bat, husk.bat og choose.bat skal den køre den fil der kom først er dette muligt ?

/Websam
Avatar billede websam Nybegynder
08. juli 2004 - 21:18 #3
Endnu mere ups den fil der er blevet kørt skal slettes efter endt kørelse :o)

Bare for lige at gøre det mere indviklet :o)

/Websam
Avatar billede arne_v Ekspert
08. juli 2004 - 21:23 #4
File.Delete("foobar.bat")
Avatar billede arne_v Ekspert
08. juli 2004 - 21:25 #5
Dim bats As String() = Directory.GetFiles("c:\*.bat")
Process.Start(bats(0))
File.Delete(bats(0))
Avatar billede websam Nybegynder
08. juli 2004 - 21:27 #6
Jeg har lige testet dette :

File.Exists("C:\foobar.bat")

Og der er ikke noget der heder jeg får denne fejl når jeg kompiler :

'Exists' is not a member of 'System.IO.TextWriter'.

Er der noget andet jeg mangler ?

/Websam
Avatar billede arne_v Ekspert
08. juli 2004 - 21:29 #7
Ah lille finess.

.NET Framework indeholder en klasse ved navn File, men du har en variabel der hedder File.

Jeg foreslår at du omdøber din variabel til MyFile eller sådan noget.
Avatar billede arne_v Ekspert
08. juli 2004 - 21:30 #8
Alternativt kan du bruge:

System.IO.File.Exists("C:\foobar.bat")

men det er da tude grimt.
Avatar billede websam Nybegynder
08. juli 2004 - 21:35 #9
Ok så langt så godt skal det så ligne noget i denne stil :

If File.Exists("C:\*.bat") Then
    Dim bats As String() = Directory.GetFiles("c:\*.bat")
    Process.Start("C:\*.bat")
    File.Delete("C:\*.bat")
End If

Eller tabte jeg den igen ?

/Websam
Avatar billede arne_v Ekspert
08. juli 2004 - 21:38 #10
Nej

Dim bats As String() = Directory.GetFiles("c:\*.bat")
If bats.Length > 0 Then
  Process.Start(bats(0))
  File.Delete(bats(0))
End If
Avatar billede websam Nybegynder
08. juli 2004 - 21:39 #11
Shit det er sent jeg mente :

If File.Exists("C:\*.bat") Then
    Dim bats As String() = Directory.GetFiles("c:\*.bat")
    Process.Start(bats(0))
    File.Delete(bats(0))
End If

/Websam
Avatar billede websam Nybegynder
08. juli 2004 - 21:40 #12
ok jeg tester lige :o)
Avatar billede websam Nybegynder
08. juli 2004 - 22:29 #13
Hmmmm.....jeg får ikke nogle fejl ved kompiling og heller ikke ved opstart af servicen, men den exekvere heller ikke .bat filerne i mappen !?!

Nogen ideer til hvad der kan være galt ?

/Websam
Avatar billede arne_v Ekspert
08. juli 2004 - 22:31 #14
Formentligt noget security et eller andet.
Avatar billede websam Nybegynder
08. juli 2004 - 22:35 #15
Jeg har sat account til LocalSystem med dette :

Me.ServiceProcessInstaller1.Account = ServiceProcess.ServiceAccount.LocalSystem

Og da jeg godt kan få den til at køre uden det nye må det jo være det nye der driller ?!?

/Websam
Avatar billede websam Nybegynder
08. juli 2004 - 22:46 #16
Jeg ved ikke hvor meget du selv har arbejdet med services men kan der mangle noget i denne sub jeg ikke har med :

Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed
    '--- Checker om der er en fil i roden C:\
    Dim bats As String() = Directory.GetFiles("c:\*.bat")
    If bats.Length > 0 Then
        Process.Start(bats(0))
        File.Delete(bats(0))
    End If
    '---
    Dim MyFile As TextWriter = New StreamWriter("C:\output.txt", True)
    MyFile.WriteLine("Test Kørsel foregik - " & Now)
    MyFile.Close()
End Sub

Dette sker hver 5. sekund og virker fint uden dette :

'--- Checker om der er en fil i roden C:\
Dim bats As String() = Directory.GetFiles("c:\*.bat")
If bats.Length > 0 Then
  Process.Start(bats(0))
  File.Delete(bats(0))
End If

/Websam
Avatar billede arne_v Ekspert
08. juli 2004 - 23:31 #17
Prøv at erstat:

Process.Start(bats(0))

med:

Process.Start("cmd", "/c " & bats(0))
Avatar billede websam Nybegynder
10. juli 2004 - 20:56 #18
Jeg prøver at rode lidt vidre med men jeg fik svar på det meste her og hvis det har noget med permission at gøre opretter jeg et nyt spm :o)

Tak for hjælpen :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester