2017-03-01 148 views
0

我尝试使用下面的代码通过PowerShell来安装MSI:MSI静默安装不工作

msiexec /a [MSI File] /qn 

根据事件日志,该软件安装成功,但不会出现在任何添加/删除程序也不在注册表项内。我在没有管理员控制的笔记本电脑上,这就是为什么我使用/a而不是/i。我也曾尝试下面的代码相同的结果之前:

msiexec /a [MSI File] ALLUSER=2 ARPSYSTEMCOMPONENT=0 /qn 

任何线索,为什么发生这种情况,我怎么能解决这个问题,从而可以将软件安装是否正确?

+0

这与PowerShell有什么关系? MSI故障与PowerShell无关。 – Nasir

+0

让安装程序[记录它在做什么](http://stackoverflow.com/a/7130758/1630171)来真正查看是否有任何问题:'/ l * v“install.log”' –

回答

3

你正在采取的步骤不应该有你期望的结果。正如你简要提到的那样,/a执行所谓的administrative install。这不是软件的安装,而是创建一个未压缩的安装源。这通常用于公司使用,以避免必须物理共享安装光盘(当有安装光盘时返回)。

你的第二个命令行有几个误区:

  • /a仍然没有“安装”软件
  • ALLUSER=2是无意义的财产ALLUSER没有定义。正确的属性名称将是ALLUSERS。您可能正在寻找ALLUSERS=2 MSIINSTALLPERUSER=1来调用Windows Installer 5/Windows 7或更高版本的每用户重定向。请注意,MSIINSTALLPERUSER可能无法正常工作,除非包装为authored with this so-called dual purpose in mind
  • ARPSYSTEMCOMPONENT=0可能会与您预期的相反。 Windows Installer主要工作在定义/未定义(非空字符串vs空字符串)定义上,而不是1/0定义。虽然documentation确实表示将其设置为1会阻止应用程序在ARP中列出,但实现可能会检查任何非空字符串值。 (当然,每第一颗子弹不会因为你不执行正常的安装关系呢。)

你最好的赌注是获取管理权限,在这种情况下,一个简单的msiexec /i package.msi将做的工作。如果您无法获得管理权限,并且该软件包的编写适当,则可以使用msiexec /i package.msi ALLUSERS=2 MSIINSTALLPERUSER=1进行安装。无论哪种情况,你也可以通过/qn或类似的来抑制UI,但是我建议避免这种情况,直到你有事情奏效。正如评论中所提到的,添加/l*v verbose.log可以帮助诊断发生的事情,不管UI的级别如何。

+0

第二个命令工作请绕过管理员凭据,但系统提示我出现以下错误: 写入文件时出错: C:\ Windows \ system32 \ Drivers \ fortiapd.sys。验证您是否有权访问该目录。 有什么办法可以解决这个问题吗? – Lotzi11

+0

不太可能。这似乎是(安装驱动程序的第一步),它明确需要管理权限。所以这个包不是双重目的。如果驱动程序不是必需的,也许可以通过转换将其删除,但只有供应商可能知道这种变化的后果。 –

+0

所以它看起来像我需要获得管理员凭据。如果我要获得凭据,我能否将它们插入到我的安装命令中? – Lotzi11