なぜあなたはこのことについて心配していますか?エンドユーザーがos。*プロパティを混乱させるくらいに愚かであれば、なぜアプリケーションを爆発させないのですか?セキュリティがあなたの第一の目標であるならば、あなたはいくつかのJNIに追加しようとする場合があり
//can be defeated by adding com.apple.eawt.Application to the classpath
public boolean isMac() {
try {
Class.forName("com.apple.eawt.Application");
return true;
} catch(Exception e) {
return false;
}
}
//can be defeated by creating a cmd.exe in PATH
public boolean isWin() {
try{
Runtime.getRuntime().exec(new String[]{"cmd.exe","/C","dir"}).waitFor();
return true;
} catch (Exception e) {
return false;
}
}
public boolean isLinux() {
if(isMac()) return false;
try{
Runtime.getRuntime().exec( new String[]{"sh","-c","ls"}).waitFor();
return true;
} catch (Exception e) {
return false;
}
}
"安全" を定義します。あなたは誰から身を守りたいのですか?あなたのアプリケーションを起動し、実行中のコンピュータを制御している人なら、おそらく運が悪いです。 AS/400のパーティションでLinux上で実行されている仮想マシンでWindows上で実行されているJVMはどうですか?その報告は何をすべきか? –
安全とは、邪魔にならないことを意味します。これはデスクトップアプリケーション向けです。ユーザーはいつでもコードを解読、逆コンパイル、編集、再コンパイルすることができますが、-Dをjvmに渡すよりもはるかに難しくなります。我々は、(これはできないので)不可解ではなく、不可解なことをしたい。 –
私はあなたが解決しようとしている問題はわかりませんが、os.nameに頼っているのは間違った解決策である可能性が高いことを保証できます。このプロパティを使って解決しようとしている実際の問題を再投稿してみませんか? – Kevin