我正在尝试使用静默模式安装Java,并指定一个包含空格的安装目录。当我这样做时,它会弹出“Windows Installer”对话框,指示其中一个参数不正确。如果我使用短路径名,则可以正常工作,但我真的不想使用短目录名称,因为该值将存储在注册表中。
我想要使用的命令...
我想要使用的命令...
jre-6u39-windows-i586.exe /s INSTALLDIR="C:\Program Files (x86)\Java"
这会弹出Windows安装程序对话框。
当我使用...
jre-6u39-windows-i586.exe /s INSTALLDIR=C:\Progra~2\Java
这个可行。
注意:“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;
}