我有一个 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=""[SystemFolder]SCHTASKS.EXE" /Create /RU "[TASK_DOMAIN]\[TASK_USERNAME]" /RP [TASK_PASSWORD] /SC DAILY /TN "Maintenance" /TR "[\\]"[SERVICELOCATION]Maintenance.exe[\\]"" /ST [TASK_TIME]"
Execute= "deferred"/>
<!-- rollback in case something went wrong -->
<CustomAction Id="CreateScheduledTask_Rollback" Execute="rollback" Return="ignore" Directory="SystemFolder" ExeCommand=""[SystemFolder]SCHTASKS.EXE" /Delete /TN "Maintenance" /F" />
<!-- removal of task -->
<CustomAction Id="RemoveScheduledTask" Return="ignore" Directory="SystemFolder" ExeCommand=""[SystemFolder]SCHTASKS.EXE" /Delete /TN "Maintenance" /F" Execute= "immediate"/>
Run Code Online (Sandbox Code Playgroud)
其排队为 …
我有一堆.SQL脚本放在InstallShield的"支持文件"视图中.
我想在我的自定义操作中访问这些SQL脚本(通过DTF).我怎样才能做到这一点?
如果我有一个托管的Wix自定义操作,是否仍然可以用文本类型更新控件?我看到可以使用session.Message with 来更新进度条InstallMessage.Progress,但是我看不到更新其他UI的方法。
我在我的wix项目中有以下内容,但msi文件(有效且从命令行运行)无论是否带有silent参数都不会运行
<InstallExecuteSequence >
<Custom Action="Runmymsi" After="InstallFinalize">Not Installed</Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud) 我正在尝试在首次安装和任何后续修改(添加/删除已安装产品的功能)上运行自定义操作.
我应该检查哪种情况?我正在使用以下但它不起作用.
<InstallExecuteSequence>
<Custom Action='SetParams' After='InstallFinalize'>NOT Installed OR WixUI_InstallMode = "Change"</Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
谢谢
我已经在互联网上阅读了很多例子,但我无法弄清楚出了什么问题.我有一个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.
每当我更改ExeCommand为C:\Windows\Explorer.EXE C:\SomeDirIKnow,Windows资源管理器都会启动...所以自定义操作似乎是正确的...
我该如何解决这个问题?
我正在使用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)
当用户选择无效路径时,我期望通过上面的自定义操作显示一个消息框.但是没有显示消息框.
我究竟做错了什么?
我希望UWP安装程序检测已安装的.net版本,在安装新版本之前处理旧版本的卸载,允许系统管理员对其网络中的PC进行批量安装.对于普通桌面应用程序来说,所有这三件事都很容易,因为我们可以创建自定义操作并执行静默安装.但是如何使用appx文件实现这些目标?
我想保护 MSI 文件不被修改。使用 ORCA 或 MSI API 可以轻松完成。很难过,因为任何人都可以修改/添加/删除具有管理员权限的 Windows 安装程序自定义操作或属性。
有没有办法将 MSI 文件设置为某种只读模式或以某种方式保护其内容?
我在从快捷方式运行的卸载序列中显示对话框时遇到问题,并使用基本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) 使用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)