[VB.NET] Batch ausführen...

c0d3r ph4ant0m

Stammgast
Ich habe ein relativ grosses Projekt (für meine Vorstellung gross...) entwickelt und starte aus diesem Projekt, welches in VisualBasic erstellt ist, mit dem Befehl Shell(InstallScreensaver.bat, windowtype'oder so etwas', hidden) ein Batch file. Dieses Batch soll eine Bildschirmschonerdatei (*.scr) in das %SystemRoot% kopieren und anschliessend mittels
rundll32.exe desk.cpl,InstallScreenSaver %systemRoot%\Screensaver.scr
diesen Bildschirmschoner "installieren". Nun mein Problem: starte ich das Batch "normal", also aus dem Explorer, funktioniert alles, starte ich es aber aus dem Visual Basic Programm wird das Kopieren der Datei , ausgelassen... ;-(
Weiss jemand warum bzw. wie ich das ändern kann? (habe leider nicht den richtigen Compiler an meiner momentanen Workstation, was micch zur "Batch Operation" zwang...)
 
A

abu

Guest
Weiss jemand warum bzw. wie ich das ändern kann? (habe leider nicht den richtigen Compiler an meiner momentanen Workstation, was micch zur "Batch Operation" zwang...)

Versteh ich nicht. Warum machst du nicht alles im VB?

Tip: Den Screensaver kannst du auch via INF-File kopieren und installieren.
 

c0d3r ph4ant0m

Stammgast
Wie funktioniert das mit dem INF-File?
Warum ich nicht alles ni VisBas mache liegt daran, dass das Projekt heute abgeschlossen werden sollte und ich hier nicht den richtigen Compiler besitze...
 
Visual Basic .NET ist auch hier installiert, aber ich probiers mal am pc nebenan...

Weisst du evt. wie das mit inf ginge?

Das mit inf hab ich keine ahnung, tut mir leid...

aber was VB.NET anbelangt, so sollte im normalen .NET FX ordner ein VB Compiler enthalten sein...

Diesen musst du per CMD ausführen mitsamt deinen VB Quelltexten...

Weisst du für den Fall wie man per Konsole compiliert??
 
A

abu

Guest
Wie funktioniert das mit dem INF-File?
Warum ich nicht alles ni VisBas mache liegt daran, dass das Projekt heute abgeschlossen werden sollte und ich hier nicht den richtigen Compiler besitze...

Ich wage nicht zu fragen, was das für ein Projekt ist, zu dem man dir nicht die richtigen Tools zur Verfügung stellt... :D

Auf die INF-Sache komme ich noch zurück, wenn möglich noch heute.
 

c0d3r ph4ant0m

Stammgast
@abu ich habe die benötigten Tools aber nicht an meiner momentanen Workstation!!
Ich habe keine Lust jetzt noch nach Zürich zu reisen und 2h verlieren!

nun gut.

Weiss jemand von euch, wie man aus Visual .NET ein programm, respektive den rundll32.exe befehl ohne batch ausführen kann??
dann könnte ich die Batch sache auslassen und das Projekt halt erst morgen früh fertigstellen...

Thx
 
A

abu

Guest
Also, hier bin ich wieder. :)

Sorry, ich wollte nicht zynisch sein. Es hörte sich einfach ein wenig komisch an, das mit dem Projekt ohne Tools.

Nun, mach ein File screensaver.inf mir folgendem Inhalt:

Code:
[Version]
Signature = "$Chicago$" 

[DefaultInstall]
CopyFiles = ScreenSaver
AddReg 	  = ScreenSaver.reg

[ScreenSaver]
%ScrFile%

[ScreenSaver.reg]
HKCU, %RegKey%, "ScreenSaverIsSecure", 0x0, "0"
HKCU, %RegKey%, "ScreenSaveTimeOut", 0x0, "600"
HKCU, %RegKey%, "ScreenSaveActive", 0x0, "1"
HKCU, %RegKey%, "SCRNSAVE.EXE", 0x0, "%11%\%ScrFile%"

[SourceDisksNames]
1 = DISK1,,,

[DestinationDirs]
ScreenSaver	=  11
; 10 = windir
; 11 = sysdir

[Strings]
RegKey =  "Control Panel\Desktop"
ScrFile = "matrix2.scr"

Ich habe hier matrix2.scr gewählt, du kannst das durch deinen Screensaver ersetzen. Zum Installieren musst du folgendes zu deinem VB-Projekt hinzufügen:

Code:
Private Declare Sub InstallHinfSection Lib "setupapi" Alias "InstallHinfSectionW" ( _
    ByVal hWnd As Long, _
    ByVal moduleHandle As Long, _
    ByVal cmdLine As String, _
    ByVal cmdShow As Long)
    
    Const infFile = "screensaver.inf"

Sub InstallScreensaver()
    cmd = "DefaultInstall" & " 132 " & App.Path & "\" & infFile
    InstallHinfSection 0, 0, StrConv(cmd, vbUnicode), 0
End Sub

Das INF- und das SCR-File sollten beide im gleichen Directory sein. Andernfalls musst du die tatsächlichen Pfadnamen angeben.

Das wars auch schon. Ein Aufruf von InstallScreensaver kopiert den Screensaver nach c:\windows\system32 und modifiziert die notwendigen Registry-Einträge gleich mit. Der Aufruf über das ControlPanel ist nicht mehr nötig.

Bitte beachte, dass ich mich hierbei der Einfachheit halber nicht um Berechtigungen kümmere. Der Caller muss Schreibrechte im system32 Verzeichnis haben.
 
A

abu

Guest
Feedback?

@c0d3r ph4ant0m: Hat das geklappt mit deinem Projekt? Ich wollte einfach mal nachfragen, interessiert mich halt.
 

c0d3r ph4ant0m

Stammgast
Yep

a.I.O.
hat geklappt, Kunde hat bereits bezahlt und Produkt ist geliefert...
Habe halt die Deadline verschoben, war aber kein Problem...

;-)

Thx @ all

*closed*
 
köntest du mir verraten wie man in VB C Sharp aus einer normaler Windows Form Anwendung eine beliebige batch Datei startest

Visual Basic und C# sind 2 paar handschuhe.. bitte mixxe die nicht in ihren bezeichnungen...

Wie man mit C# und Windows Forms eine beliebige Batch aufruft sieht folgendermassen aus (nur den abschnitt mit dem Button):

Code:
private void button1_Click(object sender, EventArgs e)
        {
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo("E:/Visual Studio 2005/MeineBatch.bat");

            System.Diagnostics.Process.Start(startInfo); 
        }

wenn die batch im gleichen verzeichnis ist wie die auszuführende datei, kannst du ganz einfach nur den datei namen angeben...
 
Oben