Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Aber da sie Plattformunabhängigkeit beim aufruf von "cmd" sowieso dahin ist ( außer man fragt vorher das System nach seinem Namen) kannst du es auch mit C lösen.
da reicht schon ein Befehl:
Code:
#include "windows.h"
using namespace deinNamesraus;
int main(array<System::String ^> ^args)
{
return WinExec("cmd", SW_SHOW);
}
Ich hatte das ganze übrigens benutzt um meinem Java-Programm eine start.exe zu spendieren.
Habs grad mal versucht - geht nicht.
Außerdem wird ja kein Befehlt an die konsole übergeben, sondern die konsole selber wird aufgerufen
/k ist sowei wie ich weiß dazu gedacht, der konsole zu sagen sie soll sich selbst nach dem übergebenem befehl nicht schließen.
Da aber kein befehl übergeben wird sollte sich die konsole sowieso nicht schließen.
Aber nochmal zur Info: Die Konsole geht gar nicht erst auf
Ich hab es auch schon mit einer eigenen policy und permission-all versucht - kein erfolg
Ich denke es liegt an dem neuem Rechtesystem von Windows Vista.
Um das genze zu umgehen könnte man auch eine dll erstellen, die dann über einen JAVA Wrapper (JNI) aufgerufen wird.
Solange das mit dem Rechtesystem noch probleme macht, würde ich das so lösen.
Wenn jemand den consolenbefehl für "starte als admin" unter vista kenn, könnte man diesen mit in die exe/dll packen und entsprechend sogar "admin-only" programme öffnen.
Ich hab grad mal versucht regedit.exe (ein admin-only programm) mit dem o.g. C programm zu öffnen - geht nicht.
Das C-Programm muss explizit mit "recte Maustaste -> als Admin starten" gestartet werden, außer man setzt den haken unter eigenschaften "immer als admin öffnen"
Möglicherweise hilft hier die C funktion ShellExecute(). Die funktion an sich ist recht neu und stellt einen ersatz für WinExec dar.
Möglicherweise "weiß" diese funktion schon vorher ob es sich um ein admin-only programm handelt, ich hab jedefalls noch nicht versucht.
Denn wenn ich den befehl (regedit) in der vistaconsole eingebe, wird automatisch nach adminrechten gefragt - in meinem C-Prgogramm nicht.
Was ist der Returnwert, oder blockiert waitFor noch?
Der Prozess gibt evtl. was auf Stdout oder Stderr aus (z.B. eine Fehlermeldung). Werte das mal aus.
im beispielcode bekomme ich keine ausgabe, weil das programm nie beendet wird.....
mit
Code:
proc = rtm.exec("cmd /c");
öffnet sich kein programm und ich bekomme als ausgabewert 0
kann das an den sicherheitsbestimmungen von vista liegen?
Mein eigentliches Ziel ist, den Pc herunterzufahren ( shutdown.exe), das ist doch mit jedem normalen Installationsprogramm möglich, wieso nicht mit Java??
immer dieses Gemecker ohne Testen,
klingt ja fast wie eine intelligente Form von 'ich weiß von nix, bitte Lösung für alles hinschreiben',
bei dem interessanten Thema spiele ich aber mit,
shutdown.exe also, was es nicht alles gibt,
wenn man das (unter XP) in die Konsole eintippt, dann fährt der PC auch nicht runter,
dann gibts nur ne Textausgabe, genau die kommt auch bei Java
und solange man die nicht aus dem InputStream liest, gehts nicht weiter (waitFor() bleibt wieder hängen)
Code:
public class Test {
public static void main(String[] args) throws Exception {
Runtime rtm;
Process proc;
int returnWert = 1;
try {
rtm = Runtime.getRuntime();
System.out.println("a1");
proc = rtm.exec("cmd /c shutdown");
System.out.println("a2");
Thread.sleep(100);
BufferedReader in = new BufferedReader(new InputStreamReader(proc
.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println("line: " + line);
}
proc.waitFor();
System.out.println("a3");
returnWert = proc.exitValue();
System.out.println("a4");
System.out.println(returnWert);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(returnWert);
}
}
Ausgabe:
a1
a2
line: Syntax: shutdown [-l | -s | -r | -a] [-f] [-m \\Computer] [-t xx]
line: [-c "Kommentar"] [-d up:xx:yy]
line:
line: Keine Argumente Zeigt diese Meldung an (wie -?).
line: -i Zeigt eine grafische Benutzeroberfl„che an (muss die erste
line: Option sein).
line: -l Abmelden (kann nicht mit der Option -m verwendet werden).
line: -s F„hrt den Computer herunter.
line: -r F„hrt den Computer herunter und startet ihn neu.
line: -a Bricht das Herunterfahren des Systems ab.
line: -m \\Computer Remotecomputer zum Herunterfahren/Neustarten/Abbrechen.
line: -t xx Zeitlimit f?r das Herunterfahren, in xx Sekunden.
line: -c "Kommentar" Kommentar f?r das Herunterfahren (maximal 127 Zeichen).
line: -f Erzwingt das Schlieáen ausgef?hrter Anwendungen ohne Warnung.
line: -d [u][p]:xx:yy Grund (Code) f?r das Herunterfahren:
line: u = Benutzercode
line: p = Code f?r geplantes Herunterfahren
line: xx = Hauptgrund (positive ganze Zahl kleiner als 256)
line: yy = Weiterer Grund (positive ganze Zahl kleiner als 65536)
a3
a4
0
0
cmd /c shutdown -s
führt bei mir zu einem Neustart nach einem 30 Sekunden-Countdown,
nicht gerade sicher, aber so ist eben Windows
------
falls du übrigens einfach nur ein Konsolenfenster öffnen willst, das geht ab Java 1.6 mit
Desktop.getDesktop().open(new File("C:/WINDOWS/system32/cmd.exe"));
bzw. ähnlich
------
mit
proc = rtm.exec("cmd /c cmd");
hat man quasi eine offene Konsole ohne Fenster, die initiale Ausgabe ist bei obigen Programm
Code:
a1
a2
line: Microsoft Windows XP [Version 5.1.2600]
line: (C) Copyright 1985-2001 Microsoft Corp.
line:
und dann hängt
proc.waitFor();
weil die Konsole natürlich nicht von selber zu geht, dann müsste man in proc.getOutputstream() nun Befehle wie 'shutdown' eintippen,