2010-04-27 106 views
2

我写了基于教程Windows安装程序自定义操作Windows安装程序自定义操作在这里找到: http://www.codeproject.com/kb/install/msicustomaction.aspx之前的任何验证

我的自定义操作是杀害其仍然可以被用户打开一个给定名称的后台进程。原因是我不希望用户看到给定EXE正在运行的警告,并且必须关闭,以便可以继续安装。这在MSI通过UI序列时正常工作,因为该操作是在本教程中的“InstallUISequence”表中创建的。
但是,当静默使用MSI(右键单击并选择修复或卸载)时,我的自定义操作当然不会执行。

我必须将自定义操作放在哪里以便在静默运行时立即执行?

我试着将它添加到“InstallExecuteSequence”,但仍显示'app running'警告。然后我尝试将自定义动作的序列号降低到5,但这也没有帮助。

注意:
我正在使用Orca修改从Visual Studio安装项目生成的MSI。然后我使用转换文件来应用它。

回答

6

您需要安排动作两次,一次在UI序列中,一次在Execute序列中,然后调度,因此它只会在尝试执行它的第一个序列中运行。 (例如,在维克斯CustomAction/@execute='firstSequence'

更新:如果您使用的Orca,然后看到Custom Action Execution Scheduling Options的文档,你只需要确保msidbCustomActionTypeFirstSequence位。

+0

抱歉,我不知道WIX。我使用Orca来生成一个转换文件,然后使用Visual Studio安装项目中的后期构建操作将其应用于生成的MSI。我在UI序列和Execute序列中添加了该操作。但是我不知道如何使用Orca定义'firstSequence'。 – Marc 2010-04-28 06:33:24

+1

@sascha:非常感谢!使用你链接到的MSDN文档,我发现我只需要将256添加到我的CustomAction.Type值中。进入257(1 + 256)后,它现在工作得很好! – Marc 2010-04-29 06:37:00

-1

您将自定义操作正确放置在“InstallExecuteSequence”中。谁显示“'应用程序正在运行'警告”?您是否确认您的自定义操作实际执行? Orca是否将你的自定义动作按顺序显示为第一个动作?什么说安装日志?

+0

我猜这将是UI安装过程中执行的Windows Installer引发的标准“正在使用的文件”对话框(在Execute序列处理之前) – saschabeaumont 2010-04-29 00:00:10