【问题标题】:VDProj Installation project adding custom action script on commitVDProj 安装项目在提交时添加自定义操作脚本
【发布时间】:2013-02-07 02:52:26
【问题描述】:

我收到了一个安装项目(.VDProject / 部署项目),它需要一个 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

【问题讨论】:

    标签: vbscript windows-installer


    【解决方案1】:

    您与 VDPROJ 的婚姻状况如何?它在 VS2012 中被微软杀死,因为坦率地说它很烂。

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

    VBScript/JScript 自定义动作是出了名的脆弱。它们也脱离了进程并重新发明了轮子(ServiceControl)。

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

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

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

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

    不管怎样,就像我说的那样……你与 VDPROJ 的婚姻如何?这些都是绕过该工具可怕性的技巧。完全使用 WiX 可能更有意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多