Installazione di Java con installazione silenziosa in una directory con spazi


Sto cercando di installare Java utilizzando la modalità silenziosa e specificare anche una directory di installazione che contiene spazi. Quando lo faccio, si apre la finestra di dialogo" Windows Installer " che indica che uno dei parametri non è corretto. Se uso il nome del percorso breve, funziona correttamente, ma preferirei davvero non usare il nome della directory breve perché è il valore che viene memorizzato nel Registro.

Il comando che voglio usare...

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

Si apre il programma di installazione di Windows dialogo.

Quando uso...

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

Funziona.

NOTA: "Program Files (x86)" è solo un esempio. Questo è installato nei siti client e scelgono la directory di installazione, quindi dobbiamo essere in grado di supportare qualsiasi directory che possono specificare.

Qualche idea su come posso fare un'installazione silenziosa ma usare ancora il nome del percorso lungo?

AGGIORNA:

Ho pensato di condividere la soluzione finale. Una cosa interessante che ho trovato che volevo la condivisione è che è possibile sopprimere il riavvio automatico di install e restituisce un codice di uscita di 3010. Pertanto è possibile rinviare il riavvio a un'altra volta. Ecco il codice (riscritto un po 'per eliminare un po' della 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;
}
Author: Gene S, 2013-02-12

1 answers

Ricordo di aver incontrato questo problema prima....

È necessario utilizzare le virgolette quando si passano percorsi al programma di installazione se i percorsi hanno spazi. Poiché il percorso arg è già tra virgolette, tu hai bisogno di sfuggire a ogni citazione con un '\' in modo che venga passato. Cosi il comando sarebbe

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

Riferimento :

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

 5
Author: Nimrod007, 2013-02-13 07:28:10