Установка 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