是否可以使用任何wix命令来创建数据库并将用户添加到数据库中?如果是的话,有没有关于如何做到这一点的例子?
我正在尝试编写一个使用防火墙扩展到WiX的WiX脚本,它似乎没有找到扩展dll(我认为).
我看到的错误是这样的:
File元素包含未处理的扩展元素'fire:FirewallException'.
请确保已提供"http://schemas.microsoft.com/wix/FirewallExtension"命名空间中元素的扩展名.
我的WiX源的相关部分是这样的:
<?xml version="1.0" encoding="windows-1252"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:fire="http://schemas.microsoft.com/wix/FirewallExtension">
<Component Id="Firewall" Guid="7278f07d-de6f-497f-9267-d5feb5216a5c" Directory="NotUsed">
<File KeyPath="yes" Source="C:\Program Files\Java\jdk1.6.0_32\bin\java.exe">
<fire:FirewallException Id="FWX1" Name="My Program" Port="80" Protocol="tcp"/>
如果我尝试使用regsrv32注册WixFirewallExtension.dll文件,我会收到此错误:
已加载模块C:\ Program Files(x86)\ Windows Installer XML v3.5\bin\WixFirewallExtension.dll,但未找到入口点DllRegisterServer.
确保C:\ Program Files(x86)\ Windows Installer XML v3.5\bin\WixFirewallExtension.dll是有效的DLL或OCX文件,然后再试一次
dll文件在我的路径中,但这可能无关紧要?我是否需要做任何其他事情才能让WiX开始使用它?
我是Wix/Burn的新手,我正在尝试理解一些基本原理.我有一个简单的引导程序,使用以下链安装所需的.net 4.0框架:
<Chain>
<PackageGroupRef Id="NetFx40ClientRedist"/>
<MsiPackage Id="MyApp" SourceFile="$(var.WixInstaller.TargetPath)" DisplayInternalUI="yes" />
</Chain>
Run Code Online (Sandbox Code Playgroud)
按照如何:使用刻录安装.NET Framework的建议.该应用程序可以在没有Web访问权限的服务器上使用,因此从本地可再发行组件安装.net非常重要.引导程序似乎运行良好,并按预期安装框架.但是,setup.exe文件的大小与应用程序大小相同(<5 MB),因此我必须假设在安装过程中仍在下载框架.
问题
那么,WixNetfxExtension包中"NetFx40ClientWeb"和"NetFx40ClientRedist"之间的区别是什么?
如何在boostrapper中包含本地可再发行组件,以便不需要下载?
编辑:
我相信我找到了答案在这里:
WiXNetFxExtension将检查名为"redist"的子目录,其中您的包用于包,然后在该路径中不存在时下载它,例如"redist\dotNetFx40_Client_setup.exe".这是标准的Burn行为.
将元素嵌套到另一个元素中的目的和/或收益(除了增加创建/删除属性的可读性之外)是什么?
我所指的例子(我正在使用WiX 3.6):XmlConfigXmlConfig
<util:XmlConfig ...>
<util:XmlConfig ... />
</util:XmlConfig>
Run Code Online (Sandbox Code Playgroud) 从使用 Wix 创建的 MSI 运行卸载时,我需要在尝试删除任何文件之前强制终止在后台运行的进程。主要应用程序由一个托盘图标组成,它反映了监视本地 Windows 服务的 bg 进程的状态(用 C# 制作,尽管这可能与进一步的相关性不大)。
我首先尝试了以下方法:
<File Id='FooEXE' Name='Foo.exe' Source='..\Source\bin\Release\Foo.exe' Vital='yes' />
...
<InstallExecuteSequence>
<Custom Action="CloseTray" Before="InstallValidate" />
</InstallExecuteSequence>
...
<CustomAction Id="CloseTray" ExeCommand="-exit" FileKey="FooEXE" Execute="immediate" Return="asyncWait" />
Run Code Online (Sandbox Code Playgroud)
确认应用程序关闭对话框后,托盘图标立即关闭,但卸载完成后,Foo.Exe 任务仍然出现在taskmgr 上。另外,还给出了以下错误消息:

这就是为什么,然后我尝试了这个:
<InstallExecuteSequence>
<Custom Action="Foo.TaskKill" Before="InstallValidate" />
</InstallExecuteSequence>
...
<CustomAction Id="Foo.TaskKill" Impersonate="yes" Return="asyncWait" Directory="WinDir" ExeCommand="\System32\taskkill.exe /F /IM Foo.exe /T" />
Run Code Online (Sandbox Code Playgroud)
获得相同结果后,尝试:
<Property Id="QtExecCmdLine" Value='"[WinDir]\System32\taskkill.exe" /F /IM Foo.exe'/>
...
<InstallExecuteSequence>
<Custom Action="MyProcess.TaskKill" Before="InstallValidate" />
</InstallExecuteSequence>
...
<CustomAction Id="MyProcess.TaskKill" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return="ignore"/>
Run Code Online (Sandbox Code Playgroud)
我从这里获取的示例:How to Kill …
我用WiX 3.7编写了一个首先安装.net 4.5的引导程序,然后是我的应用程序的MSI:
<Chain>
<PackageGroupRef Id="NetFx45Redist"/>
<MsiPackage Id="MainAppPackage"
After="NetFx45Redist"
SourceFile="..\bin\Debug\MyApp.msi"/>
</Chain>
Run Code Online (Sandbox Code Playgroud)
该WiX的文件说,NetFx45Redist是一个独立的设置,同时NetFx45Web为网络设置.在我使用设置为Id的引导程序NetFx45Redist构建之后,与使用NetFx45Web指定的Id 构建它时相比,它具有相同的大小.我很好奇所以我下载了WiX源(v3.7).我惊讶地发现这两个PackageGroup元素之间几乎没有什么区别.
该DownloadUrl对NetFx45Web是http://go.microsoft.com/fwlink/?LinkId=225704,而一个NetFx45Redist是http://go.microsoft.com/fwlink/?LinkId=225702.根据RemotePayload\@Size属性NetFx45Web是1005568字节并且NetFx45Redist是50352408字节.
我希望NetFx45Redist在我的引导程序中包含.net 4.5设置,不需要下载.我觉得这是错的.PackageGroup我应该使用哪个,以及2个下载的.net 4.5安装之间有什么区别?
我正在尝试使用Wix为MVC4应用程序创建一个安装程序.我找到了一个示例,演示了如何在此链接上为MVC4应用程序创建安装程序
但是当我尝试构建Wix安装项目时,它给出了如下错误
Error 16 Unresolved reference to symbol 'WixComponentGroup:MyWebWebComponents'
in section 'Product:{D16E42B5-3C6F-4EE5-B2F4-727BF8B74A92}'.
C:\Users\Baris\Desktop\New folder\WIXInstallerDemo-master\DemoWebsite.Setup\Product.wxs 15
1 DemoWebsite.Setup
Error 17 Unresolved reference to symbol 'WixComponentGroup:DemoWebsiteIssConfiguration'
in section 'Product:{D16E42B5-3C6F-4EE5-B2F4-727BF8B74A92}'.
C:\Users\Baris\Desktop\New folder\WIXInstallerDemo-master\DemoWebsite.Setup\Product.wxs 16
1 DemoWebsite.Setup`
Run Code Online (Sandbox Code Playgroud)
我尝试添加WixUIExtension作为参考,但它不起作用.
这是Product.wxs.并且功能节点的子节点会导致此错误
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="{D16E42B5-3C6F-4EE5-B2F4-727BF8B74A92}" Name="Demo website setup" Language="1033" Version="1.0.0.0" Manufacturer="Me" UpgradeCode="9279b740-8419-45c4-9538-6a45f8e949c7">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<Media Id="1" Cabinet="DemoWebsite.cab" EmbedCab="yes" />
<Property Id="DB_USER" Value="sa"/>
<Property Id="DB_PASSWORD" Value="sa"/>
<Property Id="DB_SERVER" Value="LOCAL"/>
<Property …Run Code Online (Sandbox Code Playgroud) 我正在使用 Wix 3.5 构建一个 MSI 安装程序,在 IIS 7 中安装两个 Web 应用程序。用户可以为每个应用程序选择是将其安装在“默认网站”下还是在 IIS 中的任何其他现有网站下安装。通过在 IIS 中创建两个 Web 应用程序,安装程序在 INSTALL 期间正常工作。问题是卸载该产品后,一个应用程序被删除,而另一个应用程序留在 IIS 管理器中,因此必须手动删除。与 WebApp 相关的所有文件和组件都被删除,但 IIS WebApp 被留下。安装程序针对 x86 和 x64 目标架构进行编译。我正在 Windows Server 2008 R2 中测试安装程序。
笔记:
我看不出我做错了什么。我在 Stackoverflow 中阅读了很多关于 的文章,但我没有发现这个问题。我真的很感激你在这个问题上的帮助或指导。
这是我在该网站上的第一篇文章,所以如果我犯了任何错误,请原谅。我一直在寻找这个问题的解决方案,但没有发现任何人有这个问题。也许我的 Wix XML 代码有问题。
Product.wxs的相关部分:
<Directory Id="TARGETDIR" Name="SourceDir">
<!-- Program Files (x86) --> …Run Code Online (Sandbox Code Playgroud) 我需要使用自定义操作将项目加载到组合框中.
UI.wxs:
<Control Id="Server" Type="ComboBox" X="30" Y="65" Width="200" Height="18" Property="DATABASE_SERVER">
<ComboBox Property="DATABASE_SERVER">
<ListItem Text="[DATABASE_SERVER]" Value="[DATABASE_SERVER]" />
</ComboBox>
<Publish Property="LOGON_VALID" Value="0">1</Publish>
</Control>
Run Code Online (Sandbox Code Playgroud)
自定义操作
private static ActionResult EnumSqlServersIntoComboBox(Session session, IEnumerable<DataRow> rows)
{
try
{
Debugger.Break();
session.Log("EnumSQLServers: Begin");
// Grab the combo box but make sure I'm getting only the one
// from WebAppInstallDlg.
View view = session.Database.OpenView("SELECT * FROM ComboBox WHERE ComboBox.Property='DATABASE_SERVER'");
view.Execute();
Int32 index = 1;
session.Log("EnumSQLServers: Enumerating SQL servers");
foreach (DataRow row in rows)
{
String serverName = row["Name"].ToString();
// …Run Code Online (Sandbox Code Playgroud) 我有一个像文件夹一样的文件夹
[MyApp]
--[Videos]
--[de-de]
-video1.mpg
- blah blah blah
--[en-us]
- video1.mpg
- blah blah blah
etc etc
Run Code Online (Sandbox Code Playgroud)
要将此视频包含在特定语言的安装程序中,我需要能够访问类似$(var.Culture)(< - didnt exist)的内容.我试图使用语言文件
<WixLocalization Culture="en-us" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="Localisation">en-us</String>
</WixLocalization>
Run Code Online (Sandbox Code Playgroud)
但这也是最重要的工作因为它们不是预处理器变量所以我不能在"蜡烛"过程中使用它们.有没有办法将culturecode作为当前构建的msi的预处理器变量?我很抱歉,如果这个问题是微不足道的,但我搜索谷歌,我没有找到一个真正的解决方案.
wix ×10
wix-extension ×10
.net ×3
wix3.6 ×3
c# ×2
wix3 ×2
wix3.5 ×2
bootstrapper ×1
iis ×1
install ×1
installation ×1
windows ×1
wixlib ×1
xml ×1