Installation de Java avec silent install dans un répertoire avec des espaces


J'essaie d'installer Java en utilisant le mode silencieux et de spécifier également un répertoire d'installation qui contient des espaces. Lorsque je fais cela, la boîte de dialogue "Windows Installer" apparaît indiquant que l'un des paramètres est incorrect. Si j'utilise le nom de chemin court qu'il fonctionne correctement, mais je préfère ne pas utiliser le répertoire bref nom parce que c'est la valeur qui est stockée dans le Registre.

La commande que je veux utiliser...

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

Cela fait apparaître le programme d'installation de Windows dialogue.

Quand j'utilise...

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

Cela fonctionne.

REMARQUE: "Program Files (x86)" n'est qu'un exemple. Ceci est installé sur les sites clients et ils choisissent le répertoire d'installation, donc nous devons être en mesure de prendre en charge n'importe quel répertoire qu'ils peuvent spécifier.

Une idée de comment je peux faire une installation silencieuse mais toujours utiliser le nom du chemin long?

mise à JOUR:

Je pensais partager la solution finale. Une chose cool que j'ai trouvé que je voulais partager est que vous pouvez supprimer le redémarrage automatique de l'installation et il renvoie un code de sortie de 3010. Par conséquent, vous pouvez reporter le redémarrage à une autre fois. Voici le code (réécrit un peu pour éliminer un tas de notre propre abstraction)

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

Je me souviens avoir rencontré ce problème auparavant....

Vous devez utiliser des guillemets lorsque vous passez des chemins au programme d'installation si les chemins ont des espaces. Parce que le chemin arg est déjà entre guillemets, vous besoin d'échapper à chaque citation avec un ' \ ' de sorte qu'il est passé à travers. Si la commande serait

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

Référence :

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