Avatar billede axkris Nybegynder
17. december 2004 - 11:48 Der er 13 kommentarer og
2 løsninger

VBscript får server til at blive ustabil

Hej alle

Ved godt at dette burde lægge i VB-forumet, men der får jeg intet hjælp, så jeg prøver i asp-forumet i stedet.

Jeg har dette vb-script, som jeg mistænker for få min server (IIS) til at blive ustabil - i hvert fald går den senere ned, når den afvikler den næste planlagt opgave (opgaver som køres om natten). Jeg kan ikke fremprovokere nogle fejl (fordi scriptet i sig selv virker), men der må være et eller andet galt med det alligevel. (Over der er ikke tale om overlapning af planlagte opgaver).

Kan du ikke optimere script for mig og omprogrammere kritiske dele? (Jeg kender ikke så meget til vb-scripts)


sub ChkDelFolder(f)
    for each folder in f.Subfolders
            if (folder.name="Deleted Items") or (folder.name="Sent Items") then
                folder.delete()
        'msgbox folder
            else
                ChkDelFolder(folder)
        end if
          next
end sub
   
startFolder="C:\Program Files\Mail Enable\Postoffices"
dim folder,folderCol
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
set f = objFSO.getFolder(startFolder)

for each folder in f.subfolders
    ChkDelFolder(folder)   
next
set folder = nothing
set objFSO = nothing
   
startFolder="C:\Program Files\Mail Enable\Backup\Sets\Autoback\Store\Postoffices"
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
set f = objFSO.getFolder(startFolder)

for each folder in f.subfolders
    ChkDelFolder(folder)   
next
set folder = nothing
set objFSO = nothing
Avatar billede axkris Nybegynder
17. december 2004 - 11:49 #1
Over der er = og der er
Avatar billede ldanielsen Nybegynder
17. december 2004 - 12:31 #2
Pas på med scope! Du bruger f to steder.

Jeg ser lige på det
Avatar billede ldanielsen Nybegynder
17. december 2004 - 12:36 #3
HEY! Du laver et rekursivt kald, det er ikke noget jeg har gode erfaringer med i VBScript.

Laver lige lidt test, jeg trænger faktisk til at få det opfrisket.

Rekursivt kald betyder at du kalder en funktion fra inde i en funktion. Det er en rigtig smart ting, hvis man kan regne med at hvert kald er isoleret. Hvis koden tror at f er det samme f so blev brugt i sidste kald, så går det i fisk.

Det kan godt passe at denne kode lægger serveren ned. Siger du at den virker? sletter den også i subfolders?
Avatar billede axkris Nybegynder
17. december 2004 - 12:41 #4
Kode virker, den gør hvad den skal gøre, og den kommer ikke med nogle fejl. Efter 30 sekunder er den færdigafviklet og bibliotekerne er slettet, som de bør være. Ingen problemer der. Men det må være noglet galt, fordi hver gang jeg piller den ud af mine planlagte opgaver, så går serveren ikke ned (om natten).

Så selv om den ikke returnere nogle fejl, så må den lave noget forkert alligevel i form af, at den ikke lukker og slukker korrekt efter sig.
Avatar billede axkris Nybegynder
17. december 2004 - 12:44 #5
I følge server-loggen, så går serveren ned efter at den har afviklet koden (dvs. efter omtalte 30 sekunder). Men hvis jeg dobbeltklikker på vb-filen, så den afvikles, så går serveren ikke ned. Det er kun når jeg sætter den til at køre som en planlagt opgave om natten, at den får server til at gå ned.
Avatar billede axkris Nybegynder
17. december 2004 - 12:46 #6
Overså lige... ja, den sletter også i subfolders.
Avatar billede ldanielsen Nybegynder
17. december 2004 - 13:18 #7
Ikke at jeg har lavet så meget om, jeg Dim'er alt, og undlader at genbruge variabelnavne, jeg ved ikke om det hjælper, men ellers må du ndgå rekursive kald. Det giver en del mere kode, men det kan laves.

Dim objFolder, objFSO, f, strStartFolder

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

strStartFolder = "C:\Program Files\Mail Enable\Postoffices"
set objFolder = objFSO.getFolder(strStartFolder)

for each f in objFolder.subfolders
    ChkDelFolder(f)   
next

sub ChkDelFolder(IobjFolder)
    for each subFolder in IobjFolder.Subfolders
        if (subFolder.name="Deleted Items") or (subFolder.name="Sent Items") then
            subFolder.delete()
            'msgbox folder
        else
            ChkDelFolder(subFolder)
        end if
    next
end sub
   

set objFolder = nothing

strStartFolder="C:\Program Files\Mail Enable\Backup\Sets\Autoback\Store\Postoffices"
set objFolder = objFSO.getFolder(strStartFolder)

for each f in objFolder.subfolders
    ChkDelFolder(f)   
next

set objFolder = nothing
set objFSO = nothing
Avatar billede ldanielsen Nybegynder
17. december 2004 - 13:23 #8
Prøv:
Private sub ChkDelFolder(ByVal IobjFolder)

i stedet for linien
sub ChkDelFolder(IobjFolder)
Avatar billede axkris Nybegynder
17. december 2004 - 13:58 #9
Takker - kigger på det senere :-)
Avatar billede kinderaeg Nybegynder
17. december 2004 - 14:03 #10
Kunne det tænkes, at nogle af de foldere du sletter med programmet, skal bruges af andre programmer, som dermed foresager nedbruder?
Avatar billede axkris Nybegynder
17. december 2004 - 14:19 #11
Har også tænkt over det, men hvis jeg i stedet sletter dem via stifinder, så brokker programmet sig ikke (altså mailserveren) og serveren går heller ikke ned.

Ud over det er der tale om sendt og slettet post.

Jeg kan godt ikke afvise, at det er derfor at den går ned. Men så burde den bare gå ned, når jeg kører scriptet.
Avatar billede axkris Nybegynder
17. december 2004 - 14:25 #12
godt = dog
Avatar billede axkris Nybegynder
08. april 2005 - 10:30 #13
Tryk svar ... det er lukketid.
Avatar billede ldanielsen Nybegynder
08. april 2005 - 11:41 #14
Mig?
Avatar billede axkris Nybegynder
23. maj 2005 - 13:52 #15
Ja :-)
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
Kurser inden for grundlæggende programmering

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