如何在我的MSI 项目中启用日志记录并设置?现在我用命令行参数运行我的:MsiLogFileLocationsetup.msi
msiexec /i install.msi /l*v InstallLog.log
Run Code Online (Sandbox Code Playgroud)
我想记录我的工作总是在setup.msi没有任何参数的情况下运行。有没有办法做到这一点?
有谁知道用于创建自己的 MSI 包的开源软件?
我想创建一个用于安装 3rd 方软件的 MSI 文件。目前它是通过不同的命令(bat 文件)和不同的配置文件安装的。
是否有免费的开源软件用于记录安装以便我获得 MSI 包?
windows-installer installshield wix package advanced-installer
我在 Visual Studio 2017 中创建了一个 C# 应用程序。现在我想将我的应用程序作为单个 Windows 安装程序文件分发。我希望有一个简单的一键式解决方案(选择我想要包含的所有文件 -> 瞧!有安装程序)。不过好像没那么容易 :-(
我经常读到 Visual Studio 支持安装项目。但现在情况似乎不再如此,对吧?
第三方工具要么非常复杂(例如Wix、Inno Setup),要么非常昂贵(例如Advanced Installer)。
真的没有简单的方法可以将某些文件包装在 .msi Windows 安装程序中吗?Microsoft 是否不提供用于创建此类安装程序的工具?
我们现有的 wix 脚本相当复杂且冗长。所有自定义操作均使用内联 vbscript 执行。
我想将其中一些操作从 vbscript 切换到 C#。各地的所有示例都以“在 VisualStudio 中创建一个 wix 项目...”开头。有没有关于如何将 C# 代码添加到现有 wix 项目的示例?它是使用老式 wix 命令行应用程序构建的吗?
昨天我一直在搜索高低,寻找如何快速获得msi数据库的ProductVersion.大多数情况下,我发现使用WindowsInstaller COM包装器,虽然这完成了工作,我想通过pinvoke使用msi.dll实现相同的结果.
我一直在研究 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" - 所以我认为这可能对我有帮助;所以在我的 …
软件:
我们一直在尝试将 SQL Server Express 2016 的命名实例安装为 VS 安装程序安装项目的一部分,但没有成功。
我们已尝试InstallNamedInstance()按以下方式调用并给出结果:
SQLEXPR_x64_ENU.exe从管理员 cmd 窗口使用相同的命令行参数运行:成功InstallNamedInstance()从控制台应用程序调用并从管理员 cmd 窗口运行控制台应用程序:成功我注意到 msi 运行时的当前用户是NT AUTHORITY\SYSTEM. 每当安装程序项目失败时,它都会失败并显示以下消息:
运行 SQL Server 安装程序的帐户不具有以下一项或全部权限:备份文件和目录的权限、管理审核和安全日志的权限以及调试程序的权限。要继续,请使用具有这两项权利的帐户。欲了解更多信息,请参阅 http://msdn.microsoft.com/en-us/library/ms813696.aspx, http://msdn.microsoft.com/en-us/library/ms813959.aspx和 HTTP:// MSDN .microsoft.com/en-us/library/ms813847.aspx。
这是安装程序项目的限制还是我遗漏了什么?使用 AdvancedInstaller 会有更好的运气吗?
请注意,安装程序项目的先决条件对我们不起作用,因为我们必须创建 SQL Server Express 的命名实例,而且我们无法看到如何将命令行参数传递给先决条件。
private void InstallNamedInstance()
{
// NOTE: Change below instance name to get unique instances (or uninstall previous instance)
var InstanceName = "TFPICDATABASES2";
var proc …Run Code Online (Sandbox Code Playgroud) sql-server windows-installer burn sql-server-express visual-studio-2017
为了进行简单的测试,我Wix为一个简单的Winform应用程序创建了一个安装程序应用程序,如下所示。但是,当我msi使用安装程序运行创建的文件时,它只运行一秒钟,然后退出而未安装Winform应用程序。问题:这里可能是什么问题?我的Product.wxs文件似乎丢失了一些东西。注意:我正在使用VS2017
产生问题的步骤
Wix Toolset Visual Studio 2017 Extension从这里安装,并按照他们的指示WiX 3.11 RC2从这里安装Winform project[仅添加一个表单,不添加任何内容]Wix Setup project使用Toolset\v3\Setup Project模板创建了一个.msi在其\..bin\Debug文件夹中创建一个文件.msi步骤6中的文件。文件运行一秒钟,出现Windows 10安装对话框(对于任何询问您是否要安装此程序的安装,该对话框都会出现)。我点击了Yes。安装程序再次运行一秒钟,然后退出。但是未安装Winform应用程序。默认的Product.wxs文件 [除了在Manufacturer属性中添加值外,我没有在此处添加任何内容]
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="WiX_test_4_Winfrm" UpgradeCode="e69fe67b-5c28-4764-8196-a6613b840eff">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] …Run Code Online (Sandbox Code Playgroud) 我通过(服务名称:测试服务)安装了Windows服务
Windows 7计算机中.NET Framework(:\ Windows \ Microsoft.NET \ FrameWork64 \ v4)中存在的InstallUtil.exe。
我可以在服务控制台下看到我的服务。
但是,我转到控制面板的程序和功能来手动卸载同一服务,但我没有在程序和功能下看到我的服务?
有什么想法为什么服务不会显示,以便用户可以卸载它?
我也检查了显示隐藏文件,但仍然没有显示服务?
经过一番谷歌搜索后,我想出了一个配置,该配置应该允许我仅安装包的较新版本(它确实如此),同时替换旧的、已安装的版本(它没有)
我的wxs文件如下:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*"
Name="Gdml File Viewer" Language="1033"
UpgradeCode="5fb07c15-32a5-4b8a-9794-e4425bfc2eea"
...>
<Package InstallerVersion="200"
Compressed="yes"
InstallScope="perMachine" Platform="x64" />
<MajorUpgrade Schedule="afterInstallValidate"
DowngradeErrorMessage="A later version of [ProductName] is already installed"
AllowSameVersionUpgrades="no"
AllowDowngrades="no" />
...
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,它确实允许我安装较新的版本,但旧版本未卸载。它仍然显示在“应用程序和功能”列表中:

(另一个实例的版本为2019.14.181.35181)
我在 VS2019 Enterprise 中构建的解决方案中有一个 C# 项目,使用 .NET 4.8,由于这是一个仅供内部使用的工具,1)我将发布的构建日志将被编辑,2)我完全知道将运行它的每台计算机的硬件和 .NET 版本,因为它们都与我自己的完全相同。
该程序集使用硬件密钥进行签名,因为我们使用白名单来确定哪些内容可以在所述笔记本电脑上运行,哪些内容不能运行(因此我必须在本地构建它),并且由于该工具的内存需求,我仅构建了 x64。(是的,我看过它运行,是的,它使用了超过 2GB 的 RAM,不,我对此无能为力。你只需要相信我的话。)
综上所述,我安装了 Microsoft 制造的扩展程序来尝试创建 MSI 安装程序,因为这需要尽可能易于安装,但它一直失败。下面输出。
1>------ Rebuild All started: Project: MyCSProject, Configuration: Release x64 ------
1> MyCSProject -> C:\dev\Source\Repos\MySolution\MyCSProject\bin\x64\Release\MyCSProject.exe
1> Done Adding Additional Store
1> Successfully signed: C:\dev\Source\Repos\MySolution\MyCSProject\bin\x64\Release\MyCSProject.exe
1>
------ Starting pre-build validation for project 'MyCSProject Setup' ------
------ Starting pre-build validation for project 'MyCSProject Setup' ------
------ Starting pre-build validation for project 'MyCSProject Setup' ------
WARNING: Unable to find dependency 'MICROSOFT.WINDOWSAPICODEPACK' (Signature='(null)' Version='1.1.0.0') of …Run Code Online (Sandbox Code Playgroud) c# windows-installer build visual-studio-setup-proje visual-studio-2019
我以前使用过InstallAware和InstallShield,它们很难使用,当出现问题时很难找到并解决问题。
我的问题是为什么我们不能使用 C# 编写的 Windows 应用程序来执行此操作。我知道 .Net Framework 可能不会安装在目标计算机上,所以我想知道为什么没有人使用过这种架构:我将使用 IntallSiheld(或任何其他类似工具)创建一个简单的安装程序来安装 .Net Framework,然后它提取并运行我自己的 Windows 应用程序,该应用程序是我在提升模式下使用 C# 编写的。我的应用程序将运行一个带有“后退”和“下一步”按钮的向导,我将处理其中的所有内容(复制文件、创建和启动 Windows 服务、添加注册表值、创建防火墙扩展等)。有人曾经这样做过吗?有什么事情吗?阻止人们这样做?
windows windows-installer installshield installaware winforms
c# ×6
wix ×5
.net ×2
windows ×2
winforms ×2
admin ×1
build ×1
burn ×1
c++ ×1
database ×1
installaware ×1
package ×1
pinvoke ×1
properties ×1
qt ×1
qt-installer ×1
service ×1
sql-server ×1