6

サイレント モードを使用して Java をインストールしようとしていますが、スペースを含むインストール ディレクトリも指定しています。これを行うと、パラメータの 1 つが正しくないことを示す [Windows インストーラ] ダイアログ ボックスがポップアップ表示されます。短いパス名を使用すると正しく機能しますが、レジストリに格納される値であるため、短いディレクトリ名を使用したくないのです。

使いたいコマンド...

jre-6u39-windows-i586.exe /s INSTALLDIR="C:\Program Files (x86)\Java"

これにより、Windows インストーラ ダイアログ ボックスが表示されます。

使うと...

jre-6u39-windows-i586.exe /s INSTALLDIR=C:\Progra~2\Java

これは機能します。

注: 「Program Files (x86)」は単なる例です。これはクライアント サイトでインストールされ、クライアント サイトがインストール ディレクトリを選択するため、クライアントが指定する任意のディレクトリをサポートできる必要があります。

サイレント インストールを実行しながら、長いパス名を使用する方法を教えてください。

アップデート:

最終的な解決策を共有すると思いました。私が共有したいと思った素晴らしい点の 1 つは、インストールの自動再起動を抑制できることです。これにより、終了コード 3010 が返されます。したがって、再起動を別の時間に延期できます。これがコードです(独自の抽象化の束を排除するために少し書き直しました)

public bool InstallJava(string installPath, string logFile)
{
    bool rebootRequired = false;

    string fullLogFileName = Path.Combine(logFile, "JavaInstall.log");
    string arguments = string.Format("/s /v\"/qn REBOOT=Suppress INSTALLDIR=\\\"{0}\\\" STATIC=1 /L \\\"{1}\\\"\"", installPath, fullLogFileName);

    ProcessStartInfo startInfo = new ProcessStartInfo { RedirectStandardError = true, RedirectStandardOutput = true, RedirectStandardInput = true, UseShellExecute = false, CreateNoWindow = true, 
    FileName = "jre-7u25-windows-x64.exe",  Arguments = arguments };

    var process = Process.Start(startInfo);
    process.WaitForExit();

    if (process.ExitCode == 3010)
        rebootRequired = true;

    else if (process.ExitCode != 0)
    {
        // This just looks through the list of error codes and returns the appropriate message
        string expandedMessage = ExpandExitCode(StringResources.JAVA_INSTALL_ERROR, process.ExitCode, fullLogFileName);
        throw new Exception(expandedMessage);
    }

    return rebootRequired;
}
4

1 に答える 1

5

以前にこの問題に遭遇したことを思い出します....

パスにスペースが含まれている場合は、パスをインストーラーに渡すときに引用符を使用する必要があります。パス引数は既に引用符で囲まれているため、パススルーされるように各引用符を「\」でエスケープする必要があります。したがって、コマンドは次のようになります

       j2re.exe /s /v"/qn INSTALLDIR=\"C:\Program Files\JRE\""

参照 :

http://docs.oracle.com/javase/1.5.0/docs/guide/deployment/deployment-guide/silent.html

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4966488

于 2013-02-12T21:48:41.017 に答える