Próbuję zainstalować Javę w trybie cichym, a także określić katalog instalacyjny zawierający spacje. Kiedy to zrobię, pojawia się okno dialogowe "Instalator Windows", wskazujące, że jeden z parametrów jest niepoprawny. Jeśli używam nazwy krótkiej ścieżki, działa ona poprawnie, ale naprawdę wolałabym nie używać nazwy krótkiego katalogu, ponieważ jest to wartość przechowywana w Rejestrze.Instalowanie środowiska Java z cichą instalacją w katalogu ze spacjami
Komenda chcę użyć ...
jre-6u39-windows-i586.exe /s INSTALLDIR="C:\Program Files (x86)\Java"
to wyskakuje okno dialogowe Instalatora Windows.
Gdy używam ...
jre-6u39-windows-i586.exe /s INSTALLDIR=C:\Progra~2\Java
To działa.
UWAGA: "Pliki programów (x86)" to tylko przykład. Jest instalowany na stronach klienta i wybiera katalog instalacyjny, dlatego musimy mieć możliwość obsługi dowolnego katalogu, który mogą określić.
Każdy pomysł, w jaki sposób mogę zrobić cichą instalację, ale nadal używać nazwy długich ścieżek?
UPDATE:
myślałem, że chciałbym podzielić się ostatecznego rozwiązania. Jedną z fajnych rzeczy, które chciałem udostępnić, jest to, że można wyłączyć automatyczne ponowne uruchomienie instalacji i zwraca kod wyjścia 3010. W związku z tym można odłożyć ponowne uruchomienie na inny czas. Oto kod (przepisany trochę wyeliminować kilka naszych własnych abstrakcji)
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;
}
Czy próbowałeś% ProgramFiles%? – vqdave
Przepraszam za brak jasności. "Program Files (x86)" to tylko przykład. Zmieniłem pytanie, aby to właściwie odzwierciedlić. –