Sto tentando di installare Java utilizzando la modalità silenziosa e inoltre di specificare una directory di installazione che contenga spazi. Quando faccio questo, si apre la finestra di dialogo "Windows Installer" che indica che uno dei parametri non è corretto. Se utilizzo il nome del percorso breve, funziona correttamente, ma preferirei non utilizzare il nome della directory breve, perché questo è il valore che viene memorizzato nel Registro di sistema.Installazione di Java con installazione invisibile in una directory con spazi
Il comando Voglio usare ...
jre-6u39-windows-i586.exe /s INSTALLDIR="C:\Program Files (x86)\Java"
questo visualizza la finestra di dialogo di Windows Installer.
Quando uso ...
jre-6u39-windows-i586.exe /s INSTALLDIR=C:\Progra~2\Java
Questo funziona.
NOTA: "Programmi (x86)" è solo un esempio. Questo è installato sui siti dei client e scelgono la directory di installazione, quindi dobbiamo essere in grado di supportare qualsiasi directory che possono specificare.
Qualche idea su come eseguire un'installazione invisibile, ma utilizzare ancora il nome del percorso lungo?
UPDATE:
ho pensato di condividere la soluzione finale. Una cosa interessante che ho trovato che volevo condividere è che è possibile sopprimere il riavvio automatico dell'installazione e restituisce un codice di uscita di 3010. Pertanto è possibile rinviare il riavvio in un altro momento. Ecco il codice (riscritto un po 'per eliminare un po' di nostra astrazione)
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;
}
Hai provato% Programmi%? – vqdave
Mi scuso per non essere stato chiaro. "Program Files (x86)" è solo un esempio. Ho cambiato la domanda per riflettere correttamente questo. –