C# in Batch file schreiben

J

Jonny9904

Gast
Hallo Leute,

ich hab folgendes Problem.

Und zwar möchte ich eine kleines Programm schreiben, was bei mir daheim im Netzwerk meine PC´s abmelden oder herunterfahren kann.

soo sieht die Maske aus:
bild für computerbase.jpg


soo ich möchte also dass ich einen ziel computernamen eingeben kann und dann noch das richtige password und den anmeldenamen und dann sollte das funktioneren :)

Ich hab mir überlegt, dass ich extern ein Batch file schreibe, was dies macht.

so sieht das Im c# programm dann aus:
Code:
string path = System.IO.Directory.GetCurrentDirectory();
            Process objProcess = new Process();
            objProcess.StartInfo.FileName = (path, "test.bat") ;
            objProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;   
            objProcess.Start();
            objProcess.WaitForExit();    
            objProcess.Dispose();

und so sieht das batch file aus:

Code:
net use \\ Zielcomputername /user: anmeldename passwort
shutdown -s -f -t 10 -m \\zielcomputername

Nur wie bekomm ich den AnmeldeNamen, den ZielComputerNamen und das Password in meine Batch File ??


Vielen Dank !

Lg
 
Für was möchtest du da noch ein Batch-File nutzen, wenn du eh schon einen C#-Prozess am laufen hast? Der Umweg ist unnötig, das File ruft ja auch nur andere Commands auf.
 
naja ich start ja den process um das batch file zu öffnen ??

wie meinst du dass ich es anders machen könnte ??
 
Entweder du schreibst die Batch neu oder du übergibst die Parameter.

Aber wie carom sagte: Der Weg ist ein wenig sinnfrei. Die Batch könntest du auch von der Kommandozeile per test.bat <pc> <benutzername> <passwort> aufrufen, da brauch es keine GUI für. Wenn du eh schon C# nutzt, dann arbeite lieber mit diesem und fahre den anderen PC darüber herunter. Heißt auch, dass du dich ein wenig in ein paar Sachen einlesen musst.

Code:
@echo off

set pc=%1
set username=%2
set passwort=%3

if "[%pc%]" == "[]" goto :help
if "[%username%]" == "[]" goto :help
if "[%passwort%]" == "[]" goto :help

:main

net use \\%pc% /user: %username% %passwort%
shutdown -s -f -t 10 -m \\%pc%

goto :exit

:help
echo test.bat Hilfe
echo.
echo test.abt <pc name> <username> <passwort>

:exit
Aufruf ist wie oben. Lässt sich schön über die Kommandozeile oder auch dem Ausführen Dialog ansprechen.
 
du meinst so: ??

Code:
string zielName = "\\" + tbInputPCName.Text;
string anmeldeName = tbInputName.Text;
string password = tbInputPassword.Text;

string arguments = "net use " + zielName + "/" + anmeldeName + " " + password;

Process objProcess = new Process();
            
objProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;    
objProcess.StartInfo.FileName = "cmd.exe";

objProcess.StartInfo.Arguments = arguments;
objProcess.Start();
objProcess.WaitForExit();    
      
objProcess.Dispose();

würde das so funktionieren ??

und brauch ich dann für den shutdown befehl einen neuen Prozess oder kann ich das mitübergeben ??
 
Zuletzt bearbeitet von einem Moderator:
Nein, die Batch belässt du wie oben, die Argumente musst du nur selbst übergeben.

arguments änderst du also auf zielName + " " + anmeldeName + " " + password ab, so wie du es auch auf der Kommandozeile machen würdest. Denk dran: Sobald Leerzeichen enthalten sind, müssen die Argumente in Anführungszeichen. Also am besten gleich immer mitliefern oder eben nach einem Leerzeichen suchen und dynamisch hinzufügen.

.Dispose() musst du nicht aufrufen. Das ist nur zwangsweise nötig, wenn du Bilder o.ä. verwendest oder da, wo kein Managed Code verwendet werden kann. Der Garbage Collector räumt hier selbst auf.

edit: Sehe gerade dass du die cmd.exe selbst aufrufst. So könnte man es natürlich auch machen. Wenn du aber direkt Parameter übergeben willst, musst du noch ein /K als Argument anfügen. Einfacher wäre es aber, wenn du gleich net mit entsprechenden Parametern use ... aufrufst.
 
Zurück
Oben