MS DOS Backup -> Ausgabe in HTML

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
AndyMars
Beiträge: 141
Registriert: 08.09.2004 11:59
Computerausstattung: Win11 Prof 64bit, i5-13500 @ 4.8 GHz, 32GB RAM, Nvidia RTX 4070 TI
Wohnort: Zürich, Schweiz
Kontaktdaten:

Re: MS DOS Backup -> Ausgabe in HTML

Beitrag von AndyMars »

Der Fehler ist

Code: Alles auswählen

FileSeek(1,Eof(1))
es muss

Code: Alles auswählen

FileSeek(1,Lof(1))
sein.

...

...ziemlich sicher ;) ...
Grüsse von AndyMars
Mr.Vain
Beiträge: 88
Registriert: 29.10.2009 00:14

Re: MS DOS Backup -> Ausgabe in HTML

Beitrag von Mr.Vain »

Danke, das hat geklappt !! :allright: :allright:


Wenn ich jetzt noch herausfinde, wie ich WMI Befehle eines Remote-PCs ausführen kann... ;)

Ich habe hier was gefunden: (http://www.activexperts.com/activmonito ... wmiremote/

jedoch weiß ich bei bestem Willen nicht, wie ich das in PB implementiere.


//edit: klappt mit UNC-Pfad :)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: MS DOS Backup -> Ausgabe in HTML

Beitrag von Kiffi »

Mr.Vain hat geschrieben:Ja, das ist schon richtig. Mir ist aber aufgefallen,
dass PB beim zweiten Starten, die Ausgabe halt nicht hinzufügt.
joh, mein Fehler. Nimm LOF(), nicht EOF(). ;-)

Grüße ... Kiffi

// Edit: Ups! Zu spät :-)
a²+b²=mc²
Mr.Vain
Beiträge: 88
Registriert: 29.10.2009 00:14

Re: MS DOS Backup -> Ausgabe in HTML

Beitrag von Mr.Vain »

Wenn bei folgender Zeile:

Code: Alles auswählen

Argument$=program(EventGadget()-1)
folgendes kommt:

Array Index Out of Bounce.


Was genau heißt das dann?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: MS DOS Backup -> Ausgabe in HTML

Beitrag von Kiffi »

Mr.Vain hat geschrieben:Was genau heißt das dann?
Dein Array program() hat eine bestimmte Anzahl von Elementen.
EventGadget()-1 ist allerdings größer als diese Anzahl. Deswegen
diese Fehlermeldung.

Kannst Du leicht selber kontrollieren:

Code: Alles auswählen

Debug ArraySize(program())
Debug EventGadget()-1
Grüße ... Kiffi
a²+b²=mc²
Mr.Vain
Beiträge: 88
Registriert: 29.10.2009 00:14

Re: MS DOS Backup -> Ausgabe in HTML

Beitrag von Mr.Vain »

Merkwürdig, sonst hat das Programm immer funktioniert. Ich poste mal meinen Quellcode:

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;                       Psexec 
;
; 
;
; ------------------------------------------------------------

Define i
Define z
Define k
Define l
Dim program.s(0)


#WindowWidth  = 390
#WindowHeight = 350

LoadFont(0, "Arial", 10,#PB_Font_Bold)

Global PSEXEC$
Global PC$
Global Argument$
Global INI_Datei$


Procedure PsExec(PC$, Argument$)


RunProgram(PSEXEC$,"-i \\"+PC$+" "+Argument$,"", #PB_Program_Hide)

EndProcedure

Procedure PsExecI(PC$, Argument$)


RunProgram(PSEXEC$,"\\"+PC$+" -i -c "+Argument$,"", #PB_Program_Hide)

EndProcedure

Procedure CreateIni()



If FileSize(INI_Datei$) <= 0
; Neue Datei
  If CreatePreferences(INI_Datei$)
        PreferenceComment("Einstellungen der PSEXEC")
        PreferenceComment("")
        PreferenceGroup("BUTTON1")     
        WritePreferenceString("BEZEICHNUNG", "CMD" )
        WritePreferenceString("BEFEHL", "cmd.exe" )
        
     ClosePreferences()
             
  Else
     MessageRequester("Error", "Fehler beim Anlegen der INI-Datei " + INI_Datei$ )
  EndIf
  
 EndIf
EndProcedure

Procedure EditIni()

                WinDir$ = Space(100): GetSystemDirectory_(WinDir$,100)
                
                RunProgram(WinDir$+"\notepad.exe", INI_Datei$, "" )

EndProcedure

Procedure Check()
      PSEXEC$ = GetCurrentDirectory()
      PSEXEC$ = PSEXEC$ + "psexec.exe"
      PC$ = GetGadgetText(501)
      If PC$ = ""
          MessageRequester("Fehler", "Bitte PC-Name angeben!")
         Goto nochmal
      EndIf
      
      If FileSize(PSEXEC$) <= 0
          MessageRequester("Fehler", "psexec.exe nicht gefunden!")
          Goto nochmal
      EndIf
EndProcedure

Procedure ReadIni()

Dim program.s(0)
INI_Datei$ = GetCurrentDirectory()
INI_Datei$ = INI_Datei$ + "psexec.ini"

OpenPreferences(INI_Datei$)
 
 i=1
 z=1
 
While PreferenceGroup("Program"+Str(i))

  ReDim program(i)
  ButtonGadget(i, ((i-1)*83)+30-((z-1)*332), ((z-1)*30)+145, 70, 20, ReadPreferenceString("BEZEICHNUNG", "Cmd"))
  program(i-1) = ReadPreferenceString("BEFEHL", "cmd.exe")
  i+1
  
  If i=5
  z+1
  EndIf
Wend

 i=50
 z=1
 k=1
 
While PreferenceGroup("Install"+Str(k))

  ReDim program(i)
  ButtonGadget(i, ((k-1)*83)+30-((z-1)*332), ((z-1)*30)+245, 70, 20, ReadPreferenceString("BEZEICHNUNG", "Cmd"))
  program(i-1) = ReadPreferenceString("BEFEHL", "cmd.exe")
  i+1
  k+1
  
  If i=54
  z+1
  EndIf
Wend
 ClosePreferences()

EndProcedure

nochmal:
OpenWindow(200, 500, 200, #WindowWidth, #WindowHeight, "    PSEXEC GUI", #PB_Window_MinimizeGadget)
 
 
 
 ReadIni()
 
 If CreateMenu(700, WindowID(200))
    MenuTitle("Datei")
      MenuItem( 800, "Settings")
      
      
 EndIf  
   
 
 
  EventID = WaitWindowEvent()

  CreateIni()
 
  TextGadget(102,60,60,80,25, "PC-Name:")
  
  StringGadget(501,  120, 60, 100, 20, "")
  SetGadgetFont(#PB_Default, FontID(0))
  TextGadget(103,30,120,80,25, "Anwendung:")  
  SetGadgetFont(#PB_Default, #PB_Default) 
  SetGadgetFont(#PB_Default, FontID(0))
  TextGadget(113,30,220,80,25, "Installation:")   
  SetGadgetFont(#PB_Default, #PB_Default)         

   
Repeat
  Define event = WaitWindowEvent()
  Select event
  
    Case #PB_Event_Menu

        Select EventMenu()  ; To see which menu has been selected

          Case 800 ; About
            EditIni()  
            
        EndSelect
        
        
        
    Case #PB_Event_CloseWindow
      End
      
    
    Case #PB_Event_Gadget
      If EventGadget()!501
              Check()
              Debug ArraySize(program())
              Argument$=program(EventGadget()-1)
              
              PC$=GetGadgetText(501)
             If EventGadget()<49
              PsExec(PC$,Argument$)
             EndIf 
             If EventGadget()>48 And EventGadget()<100
              PsExecI(PC$,Argument$)
             EndIf
      
      
      EndIf
  
  EndSelect
ForEver
        ; Argument$ = COM_BUTTON1$
         ; Check()
         ; PsExec(PC$,Argument$)
         
 

Hier der der INhalt der psexec.ini:

Code: Alles auswählen

; Einstellungen der PSEXEC
; 
[PROGRAM1]
BEZEICHNUNG = cmd
BEFEHL = cmd.exe
;
[PROGRAM2]
BEZEICHNUNG = explorer
BEFEHL = explorer.exe
; 
[PROGRAM3]
BEZEICHNUNG = regedit
BEFEHL = regedit.exe
; 
[INSTALL1]
BEZEICHNUNG = Word-Viewer
BEFEHL = \\server\\WordViewer2003SP3.exe
; 
[INSTALL2]
BEZEICHNUNG = Medicoreg
BEFEHL = \\server\\medicoreg.bat
; 
[INSTALL3]
BEZEICHNUNG = FoxitReader
BEFEHL = \\server\\FoxitReader_Setup_091013.exe
; 
[INSTALL4]
BEZEICHNUNG = Win2kUP1
BEFEHL = \\server\Windows2000-KB891861-v2-x86-DEU.EXE
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: MS DOS Backup -> Ausgabe in HTML

Beitrag von Kiffi »

Mr.Vain hat geschrieben:Merkwürdig, sonst hat das Programm immer funktioniert.
Arrays muss man Global dimensionieren, wenn sie in verschiedenen Prozeduren
benötigt werden:

Code: Alles auswählen

Global Dim program.s(0)
Du kannst Dir bei dieser Gelegenheit auch in der PB-Hilfe anschauen, wofür Shared verwendet wird.

Grüße ... Kiffi
a²+b²=mc²
Mr.Vain
Beiträge: 88
Registriert: 29.10.2009 00:14

Re: MS DOS Backup -> Ausgabe in HTML

Beitrag von Mr.Vain »

Danke, das war's :allright:
Antworten