webForumDet fria alternativet

Känna av operativsystem?

7 svar · 518 visningar · startad av nitro2k01

nitro2k01Medlem sedan aug. 20037 630 inlägg
#1

Hej! Vet ni hur man känner av vilket operativsystem som ens applikation kör på? Jag behöver skilja ut tre huvudgrupper:

  • Windows 9x
  • Windows 2000/XP
  • Unix-varianter

Dessutom skulle jag behöva köra ett konsolkommando om det är Windows 9x som körs, och samla in dess utdata. Finns det inget klockrent sätt att göra detta, så kan jag nöja mig med hur man kallar på ett externt kommando, så kan jag fixa dataläsningen själv.

legisMedlem sedan juli 20044 440 inlägg
#2

Känner inte till något sätt att göra det med java som täcker alla plattformar. För Windows finns GetVersion. Nog inte bästa sättet men ändå:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getting_the_system_version.asp

nitro2k01Medlem sedan aug. 20037 630 inlägg
#3

Hu-hum, nu var det alltså en funktion i Java som jag letar efter.

dAEkMedlem sedan feb. 20041 777 inlägg
#4

Bra url: http://www.tolstoy.com/samizdat/sysprops.html
Syntax är alltså System.getProperty("os.name");

Men jag har för mig att jag läst nånstans på sun's forum att os.name inte behöver returnera "rätt", det är upp till var JVM.. minns att jag också läste nåt om att en JVM gav en "windows 95" fastän det kördes på en '98-burk.

Hade denna länk bland mina bookmarks också: http://forum.java.sun.com/thread.jspa?forumID=4&threadID=523689

Vet inte om jag hjälper nåt eller bara förvirrar, jag känner mig rätt förvirrad :p

nitro2k01Medlem sedan aug. 20037 630 inlägg
#5

95, 98 och me går under samma kategori denna gång, så det är inget problem. Och jag ska bara använda av sun VM, så det går nog bra. Den länken var användbar.

Åter till min andra fråga, hur kör man systemkommandon, med andra ord startar program i värdmiljön? (Bara aktuellt för Windows för övrigt)

jonnyzMedlem sedan okt. 2004504 inlägg
#6

Är det något i stil med

Process p = Runtime.getRuntime().exec(cmdline);

du är ute efter?

cmdline är en sträng som skickas till operativsystemet.

sgtpepperMedlem sedan apr. 20005 524 inlägg
#7

nitro2k01 skrev:

Åter till min andra fråga, hur kör man systemkommandon, med andra ord startar program i värdmiljön? (Bara aktuellt för Windows för övrigt)

Använd klassen Runnable:

		try {
			String cmd = "ver";
			
			Process process = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", cmd});
			BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));

			String line = "";
			while((line = br.readLine()) != null) {
				System.out.println(line);		
			}
			
		} catch(IOException ioe) {
			ioe.printStackTrace();
		}

Eftersom vi vill köra ett systemkommando så anropar vi det via cmd.exe med växeln /c (Carries out the command specified by string and then terminates). Process-objektet som du får i retur från exec() ger dig en in- och en utström.

// EDIT: cmd.exe-joxet gäller självklart i en WIN-miljö, i en UNIX-miljö så kör man via lämpligt skal, t.ex bash.

nitro2k01Medlem sedan aug. 20037 630 inlägg
#8

Så man kan fånga en ström bara sådär. Tack iaf!

Genererad på 387 ms · cache AV · v20260730165559-full.f96bc7eb