从MSI包

时间:2015-06-24 10:02:09

标签: xml vbscript wix

从我在WIX中制作的.MSI包中执行VBscript时遇到了一些问题。在尝试构建项目时,它会抛出2个错误:

  

未找到CustomAction元素的DllEntry,Error,ExeCommand,JScriptCall,Script,Value或VBScriptCall属性;其中一个是必需的。

  

CustomAction元素包含非法的内部文本:'Directory =“INSTALLFOLDER”

我不完全理解为什么会抛出这些错误。

我确实给它INSTALLFOLDER作为目录,因为这是VBscript所在的位置,而第二个错误对我来说是未知的,因为我还不完全了解如何格式化ExeCommand

这是我使用的代码:

<Feature Id="ProductFeature" Title="wix_script_execution" Level="1">
          <ComponentGroupRef Id="script"/>
            </Feature>
        </Product>

        <Fragment>
            <Directory Id="TARGETDIR" Name="SourceDir">
                <Directory Id="ProgramFilesFolder">
                    <Directory Id="INSTALLFOLDER" Name="wix_script_execution" />
                </Directory>
            </Directory>
        </Fragment>

      <Fragment>
        <ComponentGroup Id="script" Directory="INSTALLFOLDER">
          <Component Id="InstallationScript" Guid="{AFA49EED-4F2C-42B4-B7EC-D3B7896C970C}">
            <File Id="InstallationScript" KeyPath="yes" Source="C:\Users\fjansen\Documents\Visual Studio 2013\Projects\Wix test\Installation script\obj\Debug\Installation script.exe" />
          </Component>
        </ComponentGroup>
      </Fragment>

      <Fragment>
      <CustomAction Id="RunInstallScript">
        Directory="INSTALLFOLDER"
        ExeCommand="[INSTALLFOLDER]Installation script.exe"
        Execute="commit"
        Return="ignore"/>
      </CustomAction>
      <InstallExecuteSequence>
        <Custom Action="RunInstallScript" Before="InstallFinalize" />
      </InstallExecuteSequence>
      </Fragment>

其中包含自定义操作的片段是从互联网上复制并由我修改的,但显然不是以正确的方式。

最终目标是在将所有文件复制到目标文件后,此VBscript会自动运行。

VBscript只需要执行一次,不需要安装。

ADDED 7-7-2015:

我最终能够测试提议的信息。但是它仍然没有执行文件,编译项目时没有任何错误,因此我不清楚原因是什么。

这是我使用的代码中包含的建议:

     <Fragment>
    <CustomAction Id="RunInstallScript"
      Directory="INSTALLFOLDER"
      ExeCommand="[INSTALLFOLDER]Installation script.exe"
      Execute="commit"
      Return="ignore"
    />
  <InstallExecuteSequence>
    <Custom Action="RunInstallScript" Before="InstallFinalize" />
  </InstallExecuteSequence>
  </Fragment>

我认为问题与ExeCommand有关,因为它只是不执行脚本。我只是无法让它工作,我错过了什么?

提前感谢。

1 个答案:

答案 0 :(得分:0)

<CustomAction Id="RunInstallScript">
    Directory="INSTALLFOLDER"
    ExeCommand="[INSTALLFOLDER]Installation script.exe"
    Execute="commit"
    Return="ignore"/>
  </CustomAction>

>后额外Id="RunInstallScript",因此您的属性(例如Directory=)成为内部文字。如果删除该字符,那些错误就会消失。还有一个额外的结束标记 - 它应该是/>></CustomAction>。最后,该自定义操作应如下所示:

<CustomAction Id="RunInstallScript"
  Directory="INSTALLFOLDER"
  ExeCommand="[INSTALLFOLDER]Installation script.exe"
  Execute="commit"
  Return="ignore"/>