Установка Java с помощью silent install в каталог с пробелами

Я пытаюсь установить Java с помощью беззвучного режима, а также указать каталог установки, содержащий пробелы. Когда я это делаю, появляется диалоговое окно "установщик Windows", указывающее, что один из параметров неверен. Если я использую короткий путь, он работает правильно, но я бы предпочел не использовать короткое имя каталога, потому что это значение, которое хранится в реестре.

команда, которую я хочу использовать...

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

это всплывает Диалоговое окно установщика Windows.

когда я использую...

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

это работает.

Примечание:" Program Files (x86) " - это всего лишь пример. Это установлено на клиентских сайтах, и они выбирают каталог установки, поэтому мы должны иметь возможность поддерживать любой каталог, который они могут указать.

любая идея, как я могу сделать тихую установку, но по-прежнему использовать длинный путь?

обновление:

Я думал, что буду поделитесь окончательным решением. Одна классная вещь, которую я нашел, что я хотел поделиться, - это то, что вы можете подавить автоматическую перезагрузку установки, и она возвращает код выхода 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;
}

1 ответов


Я помню, что сталкивался с этой проблемой раньше....

вам нужно использовать кавычки при передаче путей к установщику, если пути есть пробелы. Поскольку путь arg уже находится в кавычках, вы нужно избежать каждой цитаты с"\", чтобы она прошла. Так команда будет

       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