我没有成功修改Windows安装程序MSI在主输出安装后运行batch file。 我已经find了这个,发现了很多build议,但没有任何工作。
你上面说的是不正确的:
自定义操作只能是可执行文件。 批处理文件不可执行。
自定义操作(即使没有像InstallShield这样的工具)可以是基于.EXE,VBScript,JScript或DLL的。 如果你写了一个DLL,你可以写任何你想调用批处理文件的代码,或者对系统进行任何更改 – 没有限制。
更新 :为我工作的一个例子:(在CustomAction表中输入)
Action Test Type 34 Source SystemFolder Target cmd.exe /cc:\test.bat ExtendedType <blank>
我能够通过创建一个基本上包含以下内容的EXE来解决这个问题:
System.Diagnostics.Process.Start(pathToBatchFile);
将EXE添加到MSI文件,然后将其作为自定义操作运行。
虽然“威廉·莱拉”提出的答案是一个非常好的开始,但我在这里找到了一个更好的解决方案,值得一提。
此方法的另一个优点是,您可以将您的批处理文件放在应用程序安装文件夹而不是根C文件夹中,但是我们使用特殊标志将执行推迟到FileCopy操作之后,我们还使用noImpersonate来具有更高的特权程序文件
一些注意事项:
这是我的两个自定义操作。 在我的情况下,我想强制本机命令处理器修复一些注册表项,因此我不使用COMSPEC 。
第一个动作(类型50)在Source中执行命令,输入参数为Target,因为Type为50 + 1024 + 2048,因此它是noImpersonate标志的延迟动作。
第二个行动立即定义了NCOM财产:
那么你应该将这些操作添加到InstallExecuteSequence中 :
和这个:
请注意,在我的情况下,我可以轻松地调整的行动调用reg.exe导入Fixup.reg太。 最后一个可以使用msitran在这里建立一个后期构建自动化程序。
做一个EXE,使一个临时的.bat文件改变到你想要的任何目录,并CALL
另一个bat文件,做你所需要的。
告诉自定义操作使用该exe文件。
CPP EXE的第一个参数是EXE本身的路径。 这可以用来定位你自己,这些信息可以用来制作临时的.bat文件
在我的情况下,我添加了“自定义操作”。
在文件夹“安装”上选择“添加自定义操作”
选择cmd.exe(c:\ windows \ system32 \ cmd.exe)
然后在cmd.exe的属性中编辑“参数”即可
“/ Install / c C:\ myApp.exe –exec-some-action”