我曾尝试使用WiX为我的Windows服务构建一个MSI软件包几天,但是遇到我需要的方式有很大的问题.
文档非常糟糕,然后XML结构只是感觉不到结构.我真的不知道他们如何在版本3.6中做得更差.
我不想把所有的时间都花在MSI包上,而是我需要在主应用程序的开发时间.
所以问题是,我应该使用什么MSI构建器如果我需要:
这真的是我所需要的
如何避免WiX/MSI部署解决方案中的常见设计缺陷?
部署是大多数开发的关键部分 - 部署失败意味着您的最终用户永远无法评估您的产品.这很容易成为软件开发中最昂贵的错误.请给这个内容一个机会.我坚信,通过应用程序设计的微小变化可以显着提高软件质量,使部署更加合理,更可靠 - 这就是"答案"的全部 - 软件开发.
这是一个Q/A风格的问题,答案只列出了MSI文件中不要做的一些事情,以避免最常见的设计缺陷.
windows-installer installshield wix advanced-installer installshield-le
在我迄今为止编写的所有程序中,如果我希望它在另一个工作站上工作,我只需复制并粘贴使其运行所需的可执行文件和必要文件(例如:.o文件,二进制文件......).
但是所有为商业用途而构建的程序总是带有安装程序.例如PC游戏.所以我的问题是:当我们只是将文件复制到目标工作站时,安装的主要好处/原因是什么?
- 其中一个原因可能是防止盗版.但除此之外,我确定还有其他更强的理由吗?
我有一个非常简单的安装程序 - 将一个DLL复制到Program Files子文件夹并使用regsvr32.exe注册它.效果很好,但是如果安装了旧版本的dll,"修复"不会覆盖现有的dll.dll已签名,其版本(构建)编号始终递增(例如2.0.0.123 - > 2.0.0.124).
查看以前的类似帖子,我添加了RemoveExistingProducts并将ProductId指定为"*".卸载然后安装新版本工作正常,但我真的需要修复来更新现有的dll.
还有什么我需要做的吗?
谢谢!
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<!--
When creating a new install for the next version, these fields must be modified
-->
<?define ProductVersion = "2.0.00" ?>
<?define ProductId64 = "*" ?>
<?define ProductId32 = "*" ?>
<?define PackageId = "45F34788-66AC-441C-B666-707FFA7F1EE9" ?>
<!-- Product name as you want it to appear in Add/Remove Programs-->
<?if $(var.Platform) = x64 ?>
<?define ProductName = "XYZ (64 bit)" ?>
<?define Win64 = "yes" …Run Code Online (Sandbox Code Playgroud) 如何对两个(或更多)MSI文件进行 " 内容比较 " 并查看文件内部实际不同的内容 - 而不是进行无用的二进制比较?(这显然只告诉我我是否正在处理同一文件的副本).
一些相关和典型的问题场景:
这是一个Q/A风格的问题,主题是比较已编译的MSI文件以确定存在哪些真正的"内容差异".
基本上我们以手动安装程序(Windows powershell脚本)的形式发布我们的更改/修复.它将通过读取配置文件值在特定位置安装指定的.dll和SQL脚本文件(我们将在此文件中配置.dll和Sql脚本位置).相同的powershell脚本具有卸载代码以回滚特定的chage集.
是否有任何选项或机制来为上述要求创建Windows安装程序?
为WIX的wxs文件中的组件提供guid的正确语法是什么?
在我找到的大多数样品中
Guid="00AD2D6E-BF8A-4EA8-BE9A-57380DECD0E6"
Run Code Online (Sandbox Code Playgroud)
但是在一些样品中我发现了
Guid="{00AD2D6E-BF8A-4EA8-BE9A-57380DECD0E6}"
Run Code Online (Sandbox Code Playgroud)
我更喜欢第二个版本,因为这是由GuidGen工具直接生成的.但这是对的吗?
由于某些原因,我无法在Windows 10计算机上安装SQL Server 2017。
这个有问题的安装程序的第一件事是,我必须卸载VCRuntime 2017才能使安装程序运行。
现在,每次我尝试安装时,安装程序都会卡在此时:

到目前为止,我已经尝试过:
运行带有附加参数设置为提到这里
Setup.exe /SkipInstallerRunCheck
Run Code Online (Sandbox Code Playgroud)重新启动...重新安装...关闭防病毒软件...
[解决了]
该问题是由于后台下载导致的,尤其是在互联网速度较低的情况下(例如python或R-support组件),这种下载永远都需要花费时间。
[解]
我有一个 C#/WPF 应用程序,它比简单的应用程序更高级 - 它有主应用程序、几个库,然后是一些 NuGet 包。如果我查看项目的 bin/release/netcoreapp3.1 目录,会发现有一个 EXE、几个 JSON 和一堆 DLL(其中一些具有 PDB)。没什么太疯狂的。客户想要一个听起来不像不合理要求的安装程序。
我首先尝试了 Visual Studio 2019 附带的安装程序,但惊讶地发现它是多么无用。删除后,我上网查了一下,发现WiX似乎比较流行。好吧,我说,我会尝试一下。
安装WiX Toolset Build Tools(听起来有点多余)和WiX Toolset Visual Studio Extension并重新启动 Visual Studio 后,看起来不错。我右键单击我的解决方案,选择“添加”和“新项目”,然后看到“Setup Project for WiX v3”,看起来不错。我单击“下一步”,将其命名为“安装程序”,然后我得到:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="Installer" Language="1033" Version="1.0.0.0" Manufacturer="" UpgradeCode="2995de5a-87ef-443d-a25a-450d39720349">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate />
<Feature Id="ProductFeature" Title="Installer" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir"> …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Wix 和 Visual Studio 2019 创建一个安装程序。我是 Wix 新手,所以我刚刚开始从头开始做一些非常简单的工作。因此,我读了这个解释。我使用 Windows 10 内部版本 19042。
创建 winforms 项目对我来说确实工作得很好,但下一个项目却不行。正是因为这一步。
在项目类型树中选择Windows Installer XML 节点,然后选择安装项目
我可以找到 Wix 项目。
我安装了 Wix 工具集。
因此创建一个非常简单的安装程序应该非常简单。但事实上,这并不是因为我未能完成涉及我找不到的项目类型的教程步骤。
您可以通过以下方式提供帮助:
从逻辑上讲,我仔细检查了Windows Installer XML 节点是否真的不存在。事实并非如此。
wix ×9
installer ×3
installation ×2
appx ×1
deployment ×1
hang ×1
msiexec ×1
msix ×1
orca ×1
powershell ×1
sql-server ×1
wix3.11 ×1