标签: custom-action

WiX 对主要升级回滚的自定义操作未运行

我有一个 WiX 设置,其中有

<MajorUpgrade Schedule="afterInstallInitialize" 
  DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." />
Run Code Online (Sandbox Code Playgroud)

如果升级过程中发生错误,安装程序将回滚并恢复以前安装的版本。但是,通过自定义操作创建的计划任务会丢失并且永远不会恢复。

我用于创建/删除/回滚任务的自定义操作是:

<!-- task scheduling -->
<CustomAction Id="CreateScheduledTask" Return="check" Directory="SystemFolder"
              ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Create /RU &quot;[TASK_DOMAIN]\[TASK_USERNAME]&quot; /RP [TASK_PASSWORD] /SC DAILY /TN &quot;Maintenance&quot; /TR &quot;[\\]&quot;[SERVICELOCATION]Maintenance.exe[\\]&quot;&quot; /ST [TASK_TIME]"
              Execute= "deferred"/>
<!-- rollback in case something went wrong -->
<CustomAction Id="CreateScheduledTask_Rollback" Execute="rollback"  Return="ignore" Directory="SystemFolder" ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Delete /TN &quot;Maintenance&quot; /F" />
<!-- removal of task -->
<CustomAction Id="RemoveScheduledTask" Return="ignore" Directory="SystemFolder" ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Delete /TN &quot;Maintenance&quot; /F" Execute= "immediate"/>
Run Code Online (Sandbox Code Playgroud)

其排队为 …

custom-action wix rollback major-upgrade

2
推荐指数
1
解决办法
1698
查看次数

从DTF访问InstallShield"支持文件"(托管自定义操作)

我有一堆.SQL脚本放在InstallShield的"支持文件"视图中.

我想在我的自定义操作中访问这些SQL脚本(通过DTF).我怎样才能做到这一点?

installshield custom-action wix dtf

1
推荐指数
1
解决办法
1248
查看次数

Wix CustomAction更新UI?

如果我有一个托管的Wix自定义操作,是否仍然可以用文本类型更新控件?我看到可以使用session.Message with 来更新进度条InstallMessage.Progress,但是我看不到更新其他UI的方法。

controls custom-action wix

1
推荐指数
1
解决办法
2959
查看次数

通过wix习惯调用msi文件时没有运行

我在我的wix项目中有以下内容,但msi文件(有效且从命令行运行)无论是否带有silent参数都不会运行

<InstallExecuteSequence >
  <Custom Action="Runmymsi" After="InstallFinalize">Not Installed</Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

impersonation custom-action wix

1
推荐指数
1
解决办法
346
查看次数

Wix - 修改现有安装时运行自定义操作

我正在尝试在首次安装和任何后续修改(添加/删除已安装产品的功能)上运行自定义操作.

我应该检查哪种情况?我正在使用以下但它不起作用.

<InstallExecuteSequence>
  <Custom Action='SetParams' After='InstallFinalize'>NOT Installed OR WixUI_InstallMode = "Change"</Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

谢谢

custom-action wix sequence conditional-statements

1
推荐指数
1
解决办法
1032
查看次数

WiX自定义操作,运行EXE,错误代码1721

我已经在互联网上阅读了很多例子,但我无法弄清楚出了什么问题.我有一个WiX安装程序,可以在安装时将所有MySQL服务器文件复制到某个位置.然后我想在安装结束之前运行MySQLInstanceConfig.exe.

<CustomAction Id="CAConfigureMySqlInstance"
              Directory="dir96BE76D0898DC48E62BC8465D43A5949"
              Impersonate="no"
              Execute="commit"
              ExeCommand="[dir96BE76D0898DC48E62BC8465D43A5949]MySQLInstanceConfig.exe"
              Return="check"
/>

<InstallExecuteSequence>
    <Custom Action='CAConfigureMySqlInstance' After='InstallFiles' />

    <!-- See this for Before/After sequence moments: http://msdn.microsoft.com/en-us/library/windows/desktop/aa371199(v=vs.85).aspx -->

</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

我认为After='InstallFiles'确实是安装程序将所有文件放在正确的位置之后.现在我看到进度条在安装程序中的"复制新文件"中.然后我收到一条消息"无法运行此安装所需的程序".当我查看日志文件时,我看到了这个:

MSI(s)(54:94)[14:14:32:886]:注意:1:1721 2:CAConfigureMySqlInstance 3:C:\ Program Files(x86)\ MyCompnay\MySQL\MySQL Server 5.5\bin\4: C:\ Program Files(x86)\ MyCompany\MySQL\MySQL Server 5.5\bin\MySQLInstanceConfig.exe

每当我在'Run(Windows + R)'中复制该路径时,都会运行MySQL配置器!所以路径是正确的.因此我得出结论,在错误发生的那一刻,文件已经被复制到该位置!错误代码是1721.

每当我更改ExeCommandC:\Windows\Explorer.EXE C:\SomeDirIKnow,Windows资源管理器都会启动...所以自定义操作似乎是正确的...

我该如何解决这个问题?

custom-action wix

1
推荐指数
1
解决办法
2105
查看次数

自定义操作session.message未显示消息框

我正在使用Wix创建一个基于MSI的安装程序.

我的自定义行动声明就像这样......

<Binary Id="CustomActions" SourceFile="DLLs\CustomActions.CA.dll" />

<CustomAction Id="CheckPath" Return="check" Execute="immediate" BinaryKey="CustomActions" DllEntry="CheckPath" />
Run Code Online (Sandbox Code Playgroud)

并在WixUI_InstallDir对话框UI下,

<UI Id="WixUI_InstallDir">
    .....
    <Publish Dialog="SelectDirDlg" Control="Next" Event="DoAction" Value="CheckPath" Order="2">1</Publish>
    .....
</UI>
Run Code Online (Sandbox Code Playgroud)

在C#文件中,

[CustomAction]
public static ActionResult CheckPath(Session session)
{
      Record record2 = new Record();
      record.FormatString = "The path that you have selected is invalid!";
      session.Message(InstallMessage.Error | (InstallMessage)MessageButtons.OK, record);
      return ActionResult.Success;
}
Run Code Online (Sandbox Code Playgroud)

当用户选择无效路径时,我期望通过上面的自定义操作显示一个消息框.但是没有显示消息框.

我究竟做错了什么?

c# custom-action wix

1
推荐指数
1
解决办法
4249
查看次数

如何为普通桌面应用程序安装程序添加自定义操作到UWP安装程序?

我希望UWP安装程序检测已安装的.net版本,在安装新版本之前处理旧版本的卸载,允许系统管理员对其网络中的PC进行批量安装.对于普通桌面应用程序来说,所有这三件事都很容易,因为我们可以创建自定义操作并执行静默安装.但是如何使用appx文件实现这些目标?

windows-installer custom-action appx uwp

1
推荐指数
1
解决办法
428
查看次数

如何保护 MSI 不被修改

我想保护 MSI 文件不被修改。使用 ORCA 或 MSI API 可以轻松完成。很难过,因为任何人都可以修改/添加/删除具有管理员权限的 Windows 安装程序自定义操作或属性。

有没有办法将 MSI 文件设置为某种只读模式或以某种方式保护其内容?

c c++ windows-installer custom-action wix

1
推荐指数
1
解决办法
569
查看次数

在卸载期间从C#自定义操作显示WiX对话框

我在从快捷方式运行的卸载序列中显示对话框时遇到问题,并使用基本UI添加/删除程序.它似乎正在跳过修改和安装期间显示的InstallUISequence:

<!--Displays uninstall options before uninstall progress dialog WixUI_InstallMode = "Remove"-->
<InstallUISequence>
    <Show Dialog="UninstallDialog" Before="ProgressDlg">WixUI_InstallMode = "Remove"</Show>
</InstallUISequence>
Run Code Online (Sandbox Code Playgroud)

但是,重要的是我在基本卸载序列期间运行此对话框也很重要.是否可以从InstallExecuteSequence的C#自定义操作运行中显示在WiX中定义的对话框?如果是这样,我该怎么做呢?有没有教程?我想要显示的对话框如下所示:

<!--Dialog used to obtain uninstall options from user-->
<Dialog Id="UninstallDialog" Width="120" Height="100" Title="Options">
    <Control Id="DelDatabaseCheckBox" Type="CheckBox"
             X="15" Y="10" Width="90" Height="17" Property="DELDATABASE"
             CheckBoxValue="1" Text="Delete Database"/>

    <Control Id="DelSettingsCheckBox" Type="CheckBox"
             X="15" Y="30" Width="90" Height="17" Property="DELSETTINGS"
             CheckBoxValue="1" Text="Delete Settings"/>

    <Control Id="DelErrorLogCheckBox" Type="CheckBox"
             X="15" Y="50" Width="90" Height="17" Property="DELERRORLOG"
             CheckBoxValue="1" Text="Delete Error Log"/>

    <Control Id="ConfirmUninstall" Type="PushButton" X="22" Y="75" Width="70" Height="17" Text="Ok">
        <Publish Event="EndDialog" Value="Return">1</Publish>
    </Control>
</Dialog>
Run Code Online (Sandbox Code Playgroud)

c# windows-installer custom-action wix

0
推荐指数
1
解决办法
1766
查看次数

在wix安装运行应用程序后,CMD窗口保持打开状态

使用Wix安装程序(win 8),我有一个自定义操作,使用Wix成功安装后运行应用程序:

       <CustomAction Id='LaunchFile'
        Directory='TARGETDIR'
        Impersonate="no"
        Execute="immediate"
        ExeCommand='[SystemFolder]cmd.exe start CMD /c ""[TARGETDIR]ManagerAndControl.exe""'
        Return="asyncNoWait" />
Run Code Online (Sandbox Code Playgroud)

这很好用,但由于某种原因,CMD窗口保持打开状态,当应用程序关闭时它也会关闭.

我在谷歌找不到类似的东西,有人遇到过类似的问题吗?

谢谢

编辑:

正如@Rolo建议的那样,我正在尝试QtExecCmdLine:

  <Property Id="QtExecCmdLine" Value='C:\Users\User\Desktop\tests.exe'/>
  <CustomAction Id="QtExecExample" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate"    Return="check"/>
Run Code Online (Sandbox Code Playgroud)

并且:

 <Publish Event='DoAction' Value='QtExecExample'>(NOT Installed) AND (LAUNCHPRODUCT = 1)
 </Publish>
Run Code Online (Sandbox Code Playgroud)

但没有任何反应,日志说:

Action start 11:02:49: QtExecExample.
MSI (c) (E0:20) [11:02:49:911]: Invoking remote custom action. DLL:      C:\Users\User\AppData\Local\Temp\MSIAD42.tmp, Entrypoint: CAQuietExec
MSI (c) (E0:EC) [11:02:49:913]: Cloaking enabled.
MSI (c) (E0:EC) [11:02:49:913]: Attempting to enable all disabled privileges before calling       Install on Server
MSI (c) (E0:EC) [11:02:49:913]: …
Run Code Online (Sandbox Code Playgroud)

cmd custom-action wix

0
推荐指数
1
解决办法
1190
查看次数