現在、Javaプログラムで作業しており、レジストリを読み書きする必要があります。私はこれを行うためにいくつかのAPIを見て、私はini4j(ini4j Project Page)が見つかりました。私もiniファイルを編集する必要がありますので、私はこのソリューションを気に入っています。誰かがこのタイプのシナリオでini4jを試してみたらどうかと思っています。ini4jを使用してWindowsレジストリを編集する
答えて
私は、ini4jや引数をコマンドラインに渡すことなく、レジストリへの読み書きのためのより良いソリューションを見つけました。自分のプログラムでJNAをかなり使っていますので、これを行うライブラリを追加するのではなく、ネイティブライブラリ呼び出しを使用する方が簡単だと思いました。ここでは、特定のキーを探してレジストリを検索していた私のプロジェクトの例を示します。特定のキーは、OSがx64またはx86であるかどうかによっても異なります。
public static String GetUninstallerPath() {
try {
//if (logger.IsInfoEnabled) logger.Info("GetUninstallerPath - begin");
String uninstallerPath = null;
try {
String vncDisplayName = "UltraVNC";
String subkey32 = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
String subkey64 = "Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
boolean is64Bit = Platform.is64Bit();
String[] key;
if (is64Bit) {
key = Advapi32Util.registryGetKeys(WinReg.HKEY_LOCAL_MACHINE,
subkey64);
} else {
key = Advapi32Util.registryGetKeys(WinReg.HKEY_LOCAL_MACHINE,
subkey32);
}
if (key != null) {
for (String nextSubkeyName : key) {
TreeMap<String, Object> subKey = Advapi32Util.registryGetValues(
WinReg.HKEY_LOCAL_MACHINE,
subkey64 + "\\" + nextSubkeyName);
Object value = subKey.get("DisplayName");
Object path = null;
if (value != null) {
if (value.toString().startsWith(vncDisplayName)) {
path = subKey.get("UninstallString");
if (path != null) {
uninstallerPath = path.toString().trim();
}
}
}
}
}
}
catch (Exception ex) {
System.err.println(ex.getMessage());
}
return uninstallerPath;
}
}
私はNullPointerExceptionsを取得していたので、キー値を最初に格納するオブジェクトを使用します。別の解決策を提供してください。
残念ながらPlatform.is64Bitを(使用して64ビット)のためのテストは、あなたがそれがないと思う何をしません...
あなたのJVMは、32ビットまたは64ビットである場合、それはあなたのWindowsではありません場合は、あなたに伝えます32ビットまたは64ビット...
あなたのコードが意図したとおりに動作するように見える唯一の理由は、Windowsレジストリリダイレクタがあなたのために(正しいレジストリキーにアクセスする)「マジック」を処理するからです。
64ビットWindowsプラットフォーム上の32ビットJVMでコードを実行すると、is64Bit()がfalseを返し、サブキー32を使用しています(つまり、 "Software \ Microsoft \ Wi ndows \ CurrentVersion \ Uninstall ")。
私は残念なことにあなたと同じ間違いを犯し、あなたのような読書スレッドの後に同じ誤りのあるテストでプログラムをリリースしました。なぜなら、このスレッドが数年前でも投稿している理由です。
- 1. 編集前にpythonスクリプトを使用してWindowsレジストリをファイルにバックアップする
- 2. C++を使用してレジストリを編集する
- 3. powershellを使用してWindowsバッチファイル内のファイルを編集する
- 4. レジストリエントリを編集してバッチファイルでレジストリを開く
- 5. .NETを使用してWindowsレジストリにアクセスしますか?
- 6. 編集クラス - 他のユーザーのレジストリ
- 7. 引用符を含むレジストリ文字列の編集
- 8. Wixコンバータを使用しているWindowsレジストリ設定
- 9. C#を使用してWindows Forms 2.0でユーザーが編集できるデータグリッド
- 10. レジストリ内の環境変数を編集する
- 11. C++ Builderレジストリで値を編集するには?
- 12. 変数をクラス名として使用して編集する
- 13. ユーザーがログオフしたときにレジストリでユーザープロファイルを編集
- 14. Pythonを使ってWindowsレジストリを読む
- 15. Datagrid Windowsフォームを編集する
- 16. WindowsでErlangコードを編集する
- 17. イメージを使用するget_previous_postを使用してACFを編集する
- 18. antタスクを使用してxmlを編集する
- 19. コードバーを使用してアンドロイド編集バーを防止する
- 20. GemBox.Documentを使用してフォームコントロールを編集する
- 21. ModelForm:ModelForm検証エラーを使用してモデルデータを編集する
- 22. C#を使用してPDFブックマークのURLを編集する
- 23. java xuggleを使用してビデオファイルを編集する
- 24. スクリプトを使用してcrontabを編集する
- 25. jQueryを使用してURLを編集する
- 26. SQLクエリを使用してXML値を編集するには?
- 27. JavaScriptを使用してExcelを編集する
- 28. ExcelでVBAを使用してカスタムスタイルを編集する
- 29. FOSUser Bundleを使用して別のユーザープロファイルを編集する
- 30. jQueryを使用して行データを編集する方法