2026/1/26 0:57:10
网站建设
项目流程
网站后台管理系统教程,网站自适应手机代码,网站ip被屏蔽怎么办,银行系统网站模板安装 Wix 工具集无Visual Studio#xff1a;用命令行安装 Wix 工具集。dotnet tool install --global wix有Visual Studio#xff1a;安装 HeatWave for VS2022 扩展。安装后#xff0c;重启 Visual Studio#xff0c;你将看到可用的新项目模板。添加MSI Package项目添加 W…安装 Wix 工具集无Visual Studio用命令行安装 Wix 工具集。dotnet tool install --global wix有Visual Studio安装 HeatWave for VS2022 扩展。安装后重启 Visual Studio你将看到可用的新项目模板。添加MSI Package项目添加 Wix 安装项目。在 解决方案资源管理器 中右键单击解决方案然后选择“ 添加新 项目image选择MSI Package下一步命名项目为产品名称.Installer。WiX项目介绍HeatWave中的 MSI Package (WiX v4) 模板给出了4个文件Package.wxsFolders.wxsExampleComponents.wxsPackage.en-us.wxl文件扩展名HeatWave为我们生成的文件有两个扩展.wxs : WiX源文件。.wxl : WiX本地化文件。Package.wxs文件WiX源文件是XML文件根元素就是WiX命名空间是 http://wixtoolset.org/schemas/v4/wxs。所有WiX源文件的根元素和命名空间都是相同的。Package 元素Package元素表示MSI包只能有一个Package元素。HeatWave模板填写了所有MSI包所必需的属性例如Package IdTODO_Manufacturer.InstallerNameInstallerManufacturerTODO ManufacturerVersion1.0.0.0Id 属性设置包的全球唯一ID建议以公司名称作为前缀。在新开发项目中用此属性代替UpgradeCode不再手动设置UpgradeCode。Name 属性设置包的名称。该名称是在Windows Installed apps 列表中显示的名称。Manufacturer 属性设置软件的公司的名称。此字符串也显示在Windows Installed apps 列表中。Version 属性设置包的版本。包版本是管理包升级的重要部分。MajorUpgrade 元素MajorUpgradeDowngradeErrorMessage!(loc.DowngradeError) /当你安装一个更高的版本时之前的版本会首先被删除。DowngradeErrorMessage 属性指定一个消息当用户试图安装一个比已经安装的版本低的版本时显示。!(loc.DowngradeError) 语法是对本地化字符串的引用。AllowSameVersionUpgrades 属性设置为no默认时具有相同版本和UpgradeCode但产品代码不同产品代码每次构建时自动更新的产品被视为两个不同产品将被安装为两个应用。当设置为yes时将被视为同一个产品重复安装将视为升级。IgnoreLanguage 属性设置为no默认时不同语言的安装包将被安装为不同应用设置为yes时安装不同语言安装包将被视为升级。Feature元素Feature元素表示控制安装的内容。Feature IdMainComponentGroupRef IdExampleComponents //FeatureComponentGroupRef 元素ComponentGroupRef元素表示引用具有相同Id的ComponentGroup元素等同于把ComponentGroup元素填充到Feature元素。另一种引用方式是通过属性引用例如ComponentGroup元素有一个Directory属性它的值是所引用的Directory元素的ID表示Directory元素指定的目录作为组件组中所有文件的父目录。ComponentGroup IdExampleComponents DirectoryINSTALLFOLDERFolders.wxs文件Fragment元素Fragment元素中的内容用于被引用。单个 .wxs 文件中可以包含多个 Fragment。StandardDirectory元素StandardDirectory IdProgramFiles6432FolderStandardDirectory 元素使示标准目录之一作为包目录的父目录通过Id属性指定标准目录可用的ID参考其中有些是MSI系统文件夹属性ID而有些不是例如ProgramFiles6432Folder它会根据安装包的位数变为标准MSI目录例如对于32位包将解析为ProgramFilesFolder对应路径C:\Program Files (x86)对于64位包将解析为ProgramFiles64Folder对应路径C:\Program Files。Directory 元素Directory IdINSTALLFOLDERName!(bind.Property.Manufacturer) !(bind.Property.ProductName) /Directory 元素将创建一个新目录Id属性指定被引用时的ID。Name是目录的名称。!(bind.Property.Manufacturer)表示引用Package 元素的Manufacturer属性。!(bind.Property.ProductName)表示Package 元素的Name属性。等效于Directory IdINSTALLFOLDERNameTODO Manufacturer WixTutorialPackage /ExampleComponents.wxs文件File元素表示一个文件。File SourceExampleComponents.wxs /Source属性指定文件的名称。示例项目是把自身的ExampleComponents.wxs文件当作安装文件实际需改成应用程序。Package.en-us.wxl文件这是一个本地化文件可以添加多个本地化文件。WixLocalization xmlnshttp://wixtoolset.org/schemas/v4/wxl Cultureen-US/WixLocalization由于本地化文件不是 WiX 源文件因此它们使用不同的根元素和命名空间。Culture 属性指定本地化使用的语言和区域。String IdDowngradeErrorValueA newer version of [ProductName] is already installed. /本地化文件主要包含一堆字符串。每个字符串都有一个 id 和一个值该值是指定的区域性中本地化的字符串。支持在任何硬编码字符串的地方引用本地化字符串例如在 Package.wxs 中使用 DowngradeError 字符串为 MajorUpgrade 元素提供错误消息MajorUpgradeDowngradeErrorMessage!(loc.DowngradeError) /实操以下例子为MyApplication项目创建安装包image对需要生成安装包的项目创建发布image添加项目引用在MSI Pachage项目中添加对 MyApplication 项目的引用。右键单击 解决方案资源管理器中的安装项目然后选择“ 添加 项目引用”。项目现在应包括一个 ProjectReference 元素如下所示Project SdkWixToolset.Sdk/6.0.0ItemGroupProjectReference Include..\MyApplication\MyApplication.csproj //ItemGroup/Project添加项目引用起到以下作用确保应用项目在包项目之前生成以便在生成包时应用本身可用。为包项目提供某种方法来查找应用项目的输出。修改 Package 文件修改Package元素的Id属性Name属性和Manufacturer属性。嵌入Cabinet 文件MSI Package项目构建后生成三个文件cab1.cabWixTutorialPackage.msiWixTutorialPackage.wixpdb.cab是一个Cabinet 文件包含了被安装的程序与.msi文件组成了.msi包。.wixpdb文件与.pdb 文件一样是一个调试文件不是实际.msi包输出的一部分可以被忽略。WiX 的默认设值是将 cabinet 文件保持在 .msi 文件的外部改变设置可以将 cabinet 文件嵌入到 .msi 文件本身中。在 WiX 中MediaTemplate 元素控制如何生成和嵌入cabinet文件。在Package元素中添加MediaTemplate 元素并设置EmbedCab属性为yes如下所示Wix xmlnshttp://wixtoolset.org/schemas/v4/wxsPackageIdEdgerockConcepts.WixTutorialPackageNameWixTutorialPackageManufacturerEdgerock ConceptsVersion1.0.0.0MajorUpgrade DowngradeErrorMessage!(loc.DowngradeError)AllowSameVersionUpgradesyesIgnoreLanguageyes/MediaTemplate EmbedCabyes /Feature IdMainComponentGroupRef IdAppComponents //Feature/Package/Wix重命名 ExampleComponentsExampleComponents是模板的示例应该重命名为合适的名称。以下位置需要重命名将ExampleComponents.wxs重命名为AppComponents.wxs。打开AppComponents.wxs文件将ComponentGroup的ID修改为AppComponentsComponentGroup IdAppComponents DirectoryINSTALLFOLDER打开Package.wxs文件更新 ComponentGroupRef 的 IDFeature IdMainComponentGroupRef IdAppComponents //Feature修改安装文件引用打开AppComponents.wxs文件修改内容如下ComponentFile SourceMyApplication.exe //ComponentWiX为每个引用项目的输出目录添加到绑定路径绑定路径是 WiX 搜索打包的文件的路径。因此只需填写应用程序文件名而不用填详细路径。虽然不需要但也可以指定绝对路径或相对路径并且可以使用WiX预处理器变量引用MSBuild 属性。例如以下示例中的$(Configuration)根据不同的解决方案配置获得路径ComponentFile Source..\MyApplication\bin\$(Configuration)\MyApplication.exe //ComponentConfiguration是一个预处理器变量。File元素只添加单个文件。通常应用程序包含多个文件添加多个文件需使用Files元素如下ComponentGroup IdAppComponents DirectoryINSTALLFOLDER?define PublishDir $(MyApplication.ProjectDir)\bin\Release\net8.0\publish ?Files Include$(PublishDir)\** //ComponentGroup如果要保留某个文件卸载时不删除比如配置文件通过给Component元素添加Permanentyes表明此Component卸载时不被删除Wix xmlnshttp://wixtoolset.org/schemas/v4/wxsFragmentComponentGroup IdAppComponents DirectoryINSTALLFOLDER?define PublishDir $(MyApplication.ProjectDir)\bin\Release\net8.0\publish ?Files Include$(PublishDir)\**Exclude Files$(PublishDir)\appsettings.json//FilesComponent PermanentyesFile Source$(PublishDir)\appsettings.json //Component/ComponentGroup/Fragment/Wix安装为服务添加NuGet包WixToolset.Util.wixextimage修改AppComponents.wxs文件。示例Wix xmlnshttp://wixtoolset.org/schemas/v4/wxsxmlns:utilhttp://wixtoolset.org/schemas/v4/wxs/utilFragmentComponentGroup IdAppComponents DirectoryINSTALLFOLDER?define PublishDir $(MyApplication.ProjectDir)\bin\Release\net8.0\publish ?Files Include$(PublishDir)\**Exclude Files$(PublishDir)\appsettings.json/Exclude Files$(PublishDir)\MyApplication.exe//FilesComponent PermanentyesFile Source$(PublishDir)\appsettings.json //ComponentComponentFile Source$(PublishDir)\MyApplication.exe KeyPathyes/!-- Tell WiX to install the Service --ServiceInstall IdServiceInstallerTypeownProcessName!(bind.Property.ProductName)DisplayName!(bind.Property.ProductName)DescriptionA service.StartautoErrorControlnormal util:ServiceConfig FirstFailureActionTyperestartSecondFailureActionTyperestartThirdFailureActionTyperestartRestartServiceDelayInSeconds 10 //ServiceInstall!-- Tell WiX to start the Service --ServiceControl IdStartServiceStartinstallStopbothRemoveuninstallName!(bind.Property.ProductName)Waittrue //Component/ComponentGroup/Fragment/Wix缺少官方教程以上是个人尝试出的可行方法使用Exclude排除掉主程序文件以便在后面的Component指定主程序文件。主程序文件使用KeyPathyes以便自动生成GUID。ServiceInstall主要配置参数Startrequired确定何时启动服务。该属性的值必须是下列值之一auto服务将在系统启动期间启动。demand当服务控制管理器调用 StartService 函数时服务将启动。即手动启动。disabled禁止服务启动。util:ServiceConfig此元素是Util扩展中的元素需要添加NuGet包WixToolset.Util.wixext并添加命名空间http://wixtoolset.org/schemas/v4/wxs/util。FirstFailureActionType第一次失败时的操作SecondFailureActionType第二次失败时的操作ThirdFailureActionType后续失败时的操作可取以下值none无操作默认值reboot重新启动计算机restart重新启动服务runCommand运行一个程序RestartServiceDelayInSeconds如果三个*ActionType属性中的任何一个是“restart”则指定在执行此操作之前等待的秒数。修改安装路径如果需要修改安装路径例如建立两层文件夹修改Folders.wxs示例如下Wix xmlnshttp://wixtoolset.org/schemas/v4/wxsFragmentStandardDirectory IdProgramFiles6432FolderDirectory IdROOTDIRECTORY Name!(bind.Property.Manufacturer)Directory IdINSTALLFOLDER Name!(bind.Property.ProductName) //Directory/StandardDirectory/Fragment/Wix生成安装包先对被安装的项目执行发布。然后对安装包项目执行生成将生成一个msi文件。进阶阻止包安装假如要检测安装包是否在 Windows 的 Server 版本上运行如果是则显示一条消息并退出安装程序。Windows Installer 可以为我们做以上事。属性MSI 具有许多内置属性 这些属性允许我们检测运行包的 Windows 版本以及一个名为 launch conditions 的工具用于在不满足用户指定的条件时阻止包。MsiNTProductType 属性具有以下值Value Meaning1 Windows 2000 Professional and later2 Windows 2000 domain controller and later3 Windows 2000 Server and later所以如果MsiNTProductType 属性不是1则表明在WIndows Server上运行。条件和表达式Windows Installer的表达式语法类似Basic相等运算符是不等运算符是。但WiX 语言是用 XML 表示的 和 字符是特殊的仅用于将元素的名称括起来不能在其他地方使用它们因此 和 要改成使用lt;和gt;。对于MsiNTProductType 1要写成MsiNTProductType lt;gt; 1。编写启动条件启动条件由Launch元素表示该元素通常作为Package 元素的子元素。Launch Condition Message /如果Condition属性中的条件表达式为false则表明不满足启动条件将弹出一个消息框显示Message属性的内容。例如Launch ConditionMsiNTProductType 1 MessageLaunch Condition Failed Message Goes Here /当MsiNTProductType不为1将弹出如下消息框