VDProj安装项目在提交时添加自定义操作脚本

时间:2013-02-06 09:54:40

标签: vbscript windows-installer

我收到了一个安装项目(.VDProject / Deployment项目),它接受一个dll并提取到某个位置 我的目标是在将文件复制到正确的位置后,在安装/卸载结束时重新启动某个Windows服务。

这样做的正确方法是什么? VBS在“自定义操作”的“提交”和“卸载”部分?

此脚本不起作用:

Set oshell = createobject("Wscript.Shell")
oshell.run"cmd.exe"
wscript.sleep 500
oshell.sendkeys "net stop ""MyService"""+("{Enter}")
wscript.sleep 5000
oshell.sendkeys "net start ""MyService"""+("{Enter}")
wscript.sleep 5000
oshell.sendkeys "exit"+("{Enter}")

set oshell = nothing

WScript.Quit

1 个答案:

答案 0 :(得分:1)

你和VDPROJ结婚了吗?它在VS2012中被微软杀死,因为坦白说它很糟糕。

停止和启动服务的正确方法是使用ServiceControl表。可悲的是,VDPROJ没有公开这个表(让我算一下它的糟糕方式)。

VBScript / JScript自定义操作非常脆弱。它们也处于失控状态并重新发明轮子(ServiceControl)。

如果对安装或策略禁用回滚,则不会运行提交自定义操作。

延迟自定义操作是您需要的地方,但是,您猜对了,VDPROJ没有给您那种控制。

一种技术是创建一个WiX合并模块来封装ServiceControl元素并将其合并到您的VDPROJ中。这是我blog about的一种技巧。从示例中,您将使用ServiceControl元素,但不使用ServiceInstall元素。

也可以使用ORCA创建一个包含ServiceControl表的静态转换,并将其作为postbuild事件的一部分应用于VDPROJ构建的MSI。

无论如何,就像我说的那样......你和VDPROJ结婚了吗?这些都是解决这个工具的可怕性的黑客。在WiX上转而完全更有意义。