我过去bdist_msi从 cx_freeze 使用过,效果很好。
现在我需要创建注册表项
是否可以bdist_msi从 cx_freeze创建注册表项?
过去使用 wixtools 完成了这些设置:
<!-- File extension .foostarter -->
<RegistryValue Root='HKCR' Type='string' Key='.foostarter' Value='foostarter.File' />
<RegistryValue Root='HKCR' Type='string' Key='.foostarter' Name='Content Type'
Value='application/vnd.foobar-modstarter' />
<RegistryValue Root='HKCR' Key='foostarter.File\Shell\Open' Type='string' Value='Ausfuehren' />
<RegistryValue Root='HKCR' Key='foostarter.File\Shell\Open\Command' Type='string'
Value='"[#foostarter.exe]" file "%%1"' />
<!-- protocol foostarter://... -->
<RegistryValue Root='HKCR' Key='foostarter' Type='string' Value='URL: foostarter Protocol' />
<RegistryValue Root='HKCR' Key='foostarter' Type='string' Name='URL Protocol' Value=''/>
<RegistryValue Root='HKCR' Key='foostarter\shell\open\command' Type='string'
Value='"[#foostarter.exe]" url "%%1"' />
<!-- start without asking -->
<RegistryValue Root='HKLM' …Run Code Online (Sandbox Code Playgroud) 有人可以帮我理解WiX的工作原理吗?我有一个目录结构,我想为其创建一个安装程序.我已经使用heat.exe生成了目录结构,当我构建安装项目时,它会生成一个.msi文件,但我认为它不会安装任何东西.
也许有人可以引导我完成生成.msi安装程序的步骤.
任何建议表示赞赏,谢谢
为什么限制在我的WiX/MSI设置中使用自定义操作是个好主意?
部署是大多数开发的关键部分.请给这个内容一个机会.我坚信,通过应用程序设计的微小变化可以显着提高软件质量,使部署更加合理,更可靠 - 这就是"答案"的全部 - 软件开发.
这是一个Q/A风格的问题,从一个过长的答案中分离出来:如何避免我的WiX/MSI部署解决方案中的常见设计缺陷?.
我们使用Visual Studio 2013在vb.net中开发了一个软件.现在我们要构建一个具有以下步骤/功能的自定义安装程序:
它几乎像Adobe或Corel注册过程.我们对其他技术持开放态度,这些技术必须确保我们的软件必须仅安装在一台机器上.请注意,我们是一群新手程序员(不是那么先进水平),所以; 如果这个过程得到详细阐述,对我们非常有帮助.
我一直在研究 Qt 安装程序框架,但是当您使用此工具创建设置时,它是一个常规设置,尽管我想知道是否可以创建一个 msi 设置以便能够在网络范围内安装 Qt 程序。
我已经查看了安装程序框架文档,但到目前为止找不到任何关于此的信息。
我们的产品有三种类型/口味,但只有一种用 WiX 编写的 MSI。当我们构建安装程序时,我们通过定义的常量传递风味:
Call MSBUILD.bat ..\MSIs\CoreProduct\OurProduct.sln /p:DefineConstants="FLAVOUR=%_Flavour%"
Run Code Online (Sandbox Code Playgroud)
常量在 Visual Studio 中设置,在 Build -> Define preprocessor variables as FLAVOUR=50 下。构建过程传递值 50、200 或 LITE 作为风味。
在 WiX 代码中,我们在组件上有很多条件,告诉它根据风格安装哪个文件;例如
<Component Id="cmp7F45920B1AA100729BAE37FC846B3FC5" Guid="*">
<File Id="fil238A776D9294E14671E012472F9F7196"
KeyPath="yes"
Source="$(var.MenusPath)\ClientListView 200.r5m"
<Condition>$(var.FLAVOUR)=200</Condition>
</Component>
<Component Id="cmp8BFF42B232724DC4BA5B8F87994DEF21" Guid="*">
<File Id="fil808D6428D67248DDB8CA65DBC5978283"
KeyPath="yes"
Source="$(var.MenusPath)\ClientListView Lite.r5m"
<Condition>$(var.FLAVOUR)=LITE</Condition>
</Component>
Run Code Online (Sandbox Code Playgroud)
因此,如果 FLAVOR 为 LITE,上面的示例将安装一个名为“ClientListView Lite.r5m”的文件,如果 FLAVOR 为 200,它将安装一个名为“ClientListView 200.r5m”的文件。
这一切都按预期工作,并且已经做了多年!!
但是现在,我们有我们产品的网络版本,我们需要一个 zip 文件来包含将为每种口味安装的文件夹结构和文件。我发现您可以使用 MSIEXEC 和 /a 参数在命令行上运行 msi,然后将所有已安装到文件夹中的内容重定向并认为这正是我想要的......但可惜它不像我那样工作早就料到了。
它似乎正在做的是运行 MSI 并将文件提取到目标文件夹中,但它忽略了风味,因此您最终将“ClientListView Lite.r5m”和“ClientListView 200.r5m”文件都提取到文件夹; 这显然不是我想要的。
在阅读 MSIEXEC 上的文档后,您似乎可以传递公共属性的值,例如 msiexec.exe /a "C:\Example.msi" MY_PROP="myValue" - 所以我认为这可能对我有帮助;所以在我的 …
我通过(服务名称:测试服务)安装了Windows服务
Windows 7计算机中.NET Framework(:\ Windows \ Microsoft.NET \ FrameWork64 \ v4)中存在的InstallUtil.exe。
我可以在服务控制台下看到我的服务。
但是,我转到控制面板的程序和功能来手动卸载同一服务,但我没有在程序和功能下看到我的服务?
有什么想法为什么服务不会显示,以便用户可以卸载它?
我也检查了显示隐藏文件,但仍然没有显示服务?
我们的客户端仅允许在以管理员身份登录时安装应用程序。必须为机器的当前用户安装需要安装的应用程序。该应用程序安装正常,当我需要在用户的 appdata/user 配置文件文件夹中放置一个配置文件时,我的问题就出现了。由于这是他们想要的地方,目前配置正在安装时被删除到管理员配置文件中。我如何解决这个问题,有没有办法让我检查安装是否有其他配置文件并可能写信给他们,但这感觉很脏。
我以前使用过InstallAware和InstallShield,它们很难使用,当出现问题时很难找到并解决问题。
我的问题是为什么我们不能使用 C# 编写的 Windows 应用程序来执行此操作。我知道 .Net Framework 可能不会安装在目标计算机上,所以我想知道为什么没有人使用过这种架构:我将使用 IntallSiheld(或任何其他类似工具)创建一个简单的安装程序来安装 .Net Framework,然后它提取并运行我自己的 Windows 应用程序,该应用程序是我在提升模式下使用 C# 编写的。我的应用程序将运行一个带有“后退”和“下一步”按钮的向导,我将处理其中的所有内容(复制文件、创建和启动 Windows 服务、添加注册表值、创建防火墙扩展等)。有人曾经这样做过吗?有什么事情吗?阻止人们这样做?
windows windows-installer installshield installaware winforms