首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

日文 Windows 系統安裝 JBuilder/InstallAnywhere 失敗:TMP/TEMP 路徑含中文字元解決方案

     編輯:Java 相關知識

問題現象

  • 日文 Windows 2000/XP 系統
  • 安裝 JBuilder、MyEclipse Plugin 等 InstallAnywhere 打包安裝程式
  • 報錯:Win32 Error: 234 file "Win32Util.cpp" line: 1425
  • 安裝後啟動再報「找不到臨時目錄」

根本原因

InstallAnywhere 執行時需寫入臨時目錄 (%TMP%、%TEMP%) 解壓資源。日文系統預設用戶目錄含日文字元 (如 C:\Documents and Settings\山田太郎\Local Settings\Temp),InstallAnywhere 內部 C++ 代碼 (Win32Util.cpp) 無法正確處理非 ASCII 路徑,導致 ERROR_MORE_DATA (234) 或路徑解析失敗。

解決步驟

  1. 修改 TMP 環境變數:
    • 右鍵「我的電腦」→ 屬性 → 進階 → 環境變數
    • 用戶變數/系統變數中找到 TMP
    • 改為純 ASCII 路徑:C:\TMP (確保目錄存在、可寫入)
  2. 修改 TEMP 環境變數 (同理):
    • 同樣改為 C:\TMP 或 C:\TEMP
  3. 重新啟動安裝程式,問題解決

驗證方法

C:\> echo %TMP%
C:\TMP
C:\> echo %TEMP%
C:\TMP

深度補充:InstallAnywhere 臨時目錄使用邏輯

  • 啟動時解壓 JVM、安裝資源至 %TMP%/ISTEMPxxxx/
  • 安裝過程中寫入日誌、暫存檔
  • 完成前清理 (若未勾選保留)
  • 路徑傳遞給 CreateFile, GetTempPath 等 Win32 API,若含多位元組字元且未正確處理 Unicode/ANSI 轉換即失敗

其他受影響產品

  • JBuilder 所有版本 (InstallAnywhere 打包)
  • MyEclipse / Eclipse Plugin 安裝程式
  • InstallAnywhere 打包的任何 Java 應用安裝程式
  • 部分 InstallShield 早期版本同理

永久修正建議 (系統管理員)

  1. 建立 C:\TMP、C:\TEMP 目錄,設定 Everyone: Full Control
  2. 群組原則/登入腳本統一設定 TMP=C:\TMP, TEMP=C:\TMP
  3. 或修改預設用戶配置檔 Default User\Environment

現代背景下的啟示

  • InstallAnywhere 已停止更新 (2014 年末釋出 2014 SP1),新專案勿用
  • 現代安裝打包:jpackage (JDK 14+)、GraalVM Native Image、Install4j (商業)、NSIS (開源)、WiX Toolset (Windows 專用)
  • Java 發布最佳實踐:jlink 精簡 JRE + jpackage 產出原生安裝包 (msi/exe/dmg/deb/rpm),原生支援 Unicode 路徑

總結

將 %TMP% 和 %TEMP% 設為純 ASCII 路徑 (如 C:\TMP) 即可徹底解決 InstallAnywhere 在中文/日文/韓文 Windows 上的安裝失敗。 此問題源於 20 年代早期 C/C++ 安裝引擎對多位元組字元路徑支援不足,現代打包工具已完美解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved