String 向MSI传递参数时有关字符串转义的新手查询
请帮忙。我正在尝试做一件看起来很简单的事情,但就我的一生而言,我无法让它工作 我正在尝试运行MSI并传入一些参数,但参数中的空格会导致问题,我尝试的所有操作都失败:String 向MSI传递参数时有关字符串转义的新手查询,string,powershell,String,Powershell,请帮忙。我正在尝试做一件看起来很简单的事情,但就我的一生而言,我无法让它工作 我正在尝试运行MSI并传入一些参数,但参数中的空格会导致问题,我尝试的所有操作都失败: $CONN_STRING = "Data Source=DATABASE_INSTANCE;Initial Catalog=DATABASE_NAME;Integrated Security=True;Persist Security Info=True" $InstallLocation = "C:\Data\My Web" m
$CONN_STRING = "Data Source=DATABASE_INSTANCE;Initial Catalog=DATABASE_NAME;Integrated Security=True;Persist Security Info=True"
$InstallLocation = "C:\Data\My Web"
msiexec.exe /qb /i MyInstaller.msi TARGETDIR=$InstallLocation CONNECTION_STRING=$CONN_STRING
任何想法都会很有帮助。网上没有一个例子能解决我的问题
好的,为了简化问题,我删除了所有参数的引用,以证明什么是有效的:
msiexec.exe /qb /i North.GLN.Installer.msi TARGETDIR="'C:\Data\My Web'"
这不管用
msiexec.exe /qb /i North.GLN.Installer.msi "TARGETDIR='C:\Data\My Web'"
这不管用
msiexec.exe /qb /i North.GLN.Installer.msi "TARGETDIR='C:\Data\MyWeb'"
msiexec.exe /qb /i North.GLN.Installer.msi TARGETDIR="C:\Data\MyWeb"
这两个都没有我的网络空间,但我的安装路径有一个空间
更新
我的问题似乎与powershell有关,因为如果直接在命令行中运行相同的命令,则可以正常工作。从powershell中运行旧的exe应用程序可能会很棘手 试试这个:
$CONN_STRING = "Data Source=DATABASE_INSTANCE;Initial Catalog=DATABASE_NAME;Integrated Security=True;Persist Security Info=True"
$InstallLocation = '"C:\Data\My Web"'
$Arguments = @(
"/qb",
"/i",
"MyInstaller.msi",
"TARGETDIR=$InstallLocation",
"CONNECTION_STRING=$CONN_STRING"
)
$Proc = Start-Process -FilePath msiexec.exe -ArgumentList $Arguments -PassThru -Wait
While(-Not($Proc.HasExited)){Start-Sleep -Seconds 1}
if($Proc.ExitCode -ne 0) {
Throw ('Installation failed with errorcode: {0}' -f $Proc.ExitCode)
}
另外,我建议您使用msi包的完整路径。尝试引用property=value设置:
$CONN_STRING = "Data Source=DATABASE_INSTANCE;Initial Catalog=DATABASE_NAME;Integrated Security=True;Persist Security Info=True"
$InstallLocation = "C:\Data\My Web"
msiexec.exe /qb /i MyInstaller.msi "TARGETDIR=$InstallLocation" "CONNECTION_STRING=$CONN_STRING"
最后,我放弃了powershell,转而使用批处理文件。不理想,但我不能再花时间去做最基本的事情了 我使用的命令如下:
SET DATABASE_INSTANCE=SERVERNAME
SET DATABASE_NAME=DBNAME
SET INSTALL_DIRECTORY=INSTALLLOCATION
SET CONN_STRING=Data Source=%DATABASE_INSTANCE%;Initial Catalog=%DATABASE_NAME%;Integrated Security=True;Persist Security Info=True
msiexec.exe /qb /i MyInstaller.msi
TARGETDIR="%INSTALL_DIRECTORY%"
CONNECTION_STRING="%CONN_STRING%"
不能把单引号也放在双引号里吗
$InstallLocation=“'C:\Data\My Web'”
也应该起作用,这样在变量展开时,单变量仍然存在。另外,最好向我们展示您尝试过的不起作用的内容,这样社区就不会覆盖同一领域。这似乎造成了同样的问题,因为MSI帮助窗口弹出,表明我的参数格式不正确,这就是我遇到的问题。我明白了,对不起,我误解了这个问题。您正在安装的是哪个程序?我认为您必须参考该产品的手册以了解哪些选项可用,或者您可以在不使用/qb的情况下安装MSI软件包,并使用开关:/L*V myinstall.log
生成详细日志。然后搜索此日志以找出使用了哪个连接字符串。忽略连接字符串一秒钟后,我可以使用不带空格的路径传递TARGETDIR,并且应用程序使用空白连接字符串正确安装。当我的路径有一个带空格的字符串时,问题就出现了。完全删除对变量的所有依赖关系。我明白了,这是通过将路径括在引号中修复的:$InstallLocation='“C:\Data\My Web”不是必需的(请参见我的答案)。