我收到了一个安装项目(.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
答案 0 :(得分:1)
你和VDPROJ结婚了吗?它在VS2012中被微软杀死,因为坦白说它很糟糕。
停止和启动服务的正确方法是使用ServiceControl表。可悲的是,VDPROJ没有公开这个表(让我算一下它的糟糕方式)。
VBScript / JScript自定义操作非常脆弱。它们也处于失控状态并重新发明轮子(ServiceControl)。
如果对安装或策略禁用回滚,则不会运行提交自定义操作。
延迟自定义操作是您需要的地方,但是,您猜对了,VDPROJ没有给您那种控制。
一种技术是创建一个WiX合并模块来封装ServiceControl元素并将其合并到您的VDPROJ中。这是我blog about的一种技巧。从示例中,您将使用ServiceControl元素,但不使用ServiceInstall元素。
也可以使用ORCA创建一个包含ServiceControl表的静态转换,并将其作为postbuild事件的一部分应用于VDPROJ构建的MSI。
无论如何,就像我说的那样......你和VDPROJ结婚了吗?这些都是解决这个工具的可怕性的黑客。在WiX上转而完全更有意义。