相关疑难解决方法(0)

在没有任何命令行参数的情况下为 MSI 安装程序启用安装日志

如何在我的MSI 项目中启用日志记录并设置?现在我用命令行参数运行我的:MsiLogFileLocationsetup.msi

msiexec /i install.msi /l*v InstallLog.log
Run Code Online (Sandbox Code Playgroud)

我想记录我的工作总是在setup.msi没有任何参数的情况下运行。有没有办法做到这一点?

windows-installer

4
推荐指数
1
解决办法
4252
查看次数

如何使用开源软件创建自己的 MSI 包?

有谁知道用于创建自己的 MSI 包的开源软件?

我想创建一个用于安装 3rd 方软件的 MSI 文件。目前它是通过不同的命令(bat 文件)和不同的配置文件安装的。

是否有免费的开源软件用于记录安装以便我获得 MSI 包?

windows-installer installshield wix package advanced-installer

3
推荐指数
1
解决办法
2万
查看次数

在 .msi 安装程序中包装 C# 应用程序

我在 Visual Studio 2017 中创建了一个 C# 应用程序。现在我想将我的应用程序作为单个 Windows 安装程序文件分发。我希望有一个简单的一键式解决方案(选择我想要包含的所有文件 -> 瞧!有安装程序)。不过好像没那么容易 :-(

我经常读到 Visual Studio 支持安装项目。但现在情况似乎不再如此,对吧?

第三方工具要么非常复杂(例如Wix、Inno Setup),要么非常昂贵(例如Advanced Installer)。

真的没有简单的方法可以将某些文件包装在 .msi Windows 安装程序中吗?Microsoft 是否不提供用于创建此类安装程序的工具?

.net c# windows windows-installer

3
推荐指数
1
解决办法
8708
查看次数

如何将 C# 方法添加到现有的大型 wix 脚本中

我们现有的 wix 脚本相当复杂且冗长。所有自定义操作均使用内联 vbscript 执行。

我想将其中一些操作从 vbscript 切换到 C#。各地的所有示例都以“在 VisualStudio 中创建一个 wix 项目...”开头。有没有关于如何将 C# 代码添加到现有 wix 项目的示例?它是使用老式 wix 命令行应用程序构建的吗?

c# wix

3
推荐指数
1
解决办法
3251
查看次数

以编程方式检查MSI的ProductVersion

昨天我一直在搜索高低,寻找如何快速获得msi数据库的ProductVersion.大多数情况下,我发现使用WindowsInstaller COM包装器,虽然这完成了工作,我想通过pinvoke使用msi.dll实现相同的结果.

c# database pinvoke windows-installer properties

2
推荐指数
2
解决办法
8533
查看次数

使用 Qt 安装程序框架创建 .msi 安装程序

我一直在研究 Qt 安装程序框架,但是当您使用此工具创建设置时,它是一个常规设置,尽管我想知道是否可以创建一个 msi 设置以便能够在网络范围内安装 Qt 程序。

我已经查看了安装程序框架文档,但到目前为止找不到任何关于此的信息。

c++ qt windows-installer qt-installer

2
推荐指数
1
解决办法
1485
查看次数

Wix 安装程序:在命令行执行 MSIEXEC 管理员安装时设置组件条件属性

我们的产品有三种类型/口味,但只有一种用 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-installer wix admin conditional-statements

2
推荐指数
1
解决办法
3223
查看次数

带有 Visual Studio 2017 安装程序项目的 SQL Server 命名实例

软件:

  1. SQL Server Express 2016
  2. 视觉工作室 2017

我们一直在尝试将 SQL Server Express 2016 的命名实例安装为 VS 安装程序安装项目的一部分,但没有成功。

我们已尝试InstallNamedInstance()按以下方式调用并给出结果:

  1. SQLEXPR_x64_ENU.exe从管理员 cmd 窗口使用相同的命令行参数运行:成功
  2. InstallNamedInstance()从控制台应用程序调用并从管理员 cmd 窗口运行控制台应用程序:成功
  3. 安装自定义操作(所有人和只有我):失败
  4. BeforeInstall 事件(所有人和我自己):失败

我注意到 msi 运行时的当前用户是NT AUTHORITY\SYSTEM. 每当安装程序项目失败时,它都会失败并显示以下消息:

运行 SQL Server 安装程序的帐户不具有以下一项或全部权限:备份文件和目录的权限、管理审核和安全日志的权限以及调试程序的权限。要继续,请使用具有这两项权利的帐户。欲了解更多信息,请参阅 http://msdn.microsoft.com/en-us/library/ms813696.aspxhttp://msdn.microsoft.com/en-us/library/ms813959.aspxHTTP:// 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

2
推荐指数
1
解决办法
1743
查看次数

WiX安装程序MSI未安装使用Visual Studio 2017创建的Winform应用

为了进行简单的测试,我Wix为一个简单的Winform应用程序创建了一个安装程序应用程序,如下所示。但是,当我msi使用安装程序运行创建的文件时,它只运行一秒钟,然后退出而未安装Winform应用程序。问题:这里可能是什么问题?我的Product.wxs文件似乎丢失了一些东西。注意:我正在使用VS2017

产生问题的步骤

  1. Wix Toolset Visual Studio 2017 Extension这里安装,并按照他们的指示WiX 3.11 RC2这里安装
  2. 创建一个默认值Winform project[仅添加一个表单,不添加任何内容]
  3. 在同一解决方案中Wix Setup project使用Toolset\v3\Setup Project模板创建了一个
  4. 在WiX安装项目中添加了对Winform项目的引用
  5. 构建了整个解决方案。
  6. 右键单击安装项目,然后重新构建它,.msi在其\..bin\Debug文件夹中创建一个文件
  7. 双击.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)

c# windows-installer wix winforms visual-studio-2017

1
推荐指数
1
解决办法
2464
查看次数

Windows服务未显示在控制面板下的“添加删除程序”中

我通过(服务名称:测试服务)安装了Windows服务

Windows 7计算机中.NET Framework(:\ Windows \ Microsoft.NET \ FrameWork64 \ v4)中存在的InstallUtil.exe。

我可以在服务控制台下看到我的服务。

但是,我转到控制面板的程序和功能来手动卸载同一服务,但我没有在程序和功能下看到我的服务?

有什么想法为什么服务不会显示,以便用户可以卸载它?

我也检查了显示隐藏文件,但仍然没有显示服务?

.net c# service windows-installer windows-services

1
推荐指数
1
解决办法
3273
查看次数

WIX 不卸载旧版本

经过一番谷歌搜索后,我想出了一个配置,该配置应该允许我仅安装包的较新版本(它确实如此),同时替换旧的、已安装的版本(它没有)

我的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)

windows-installer wix

1
推荐指数
1
解决办法
4281
查看次数

在 VS2019 .NET 4.8 中为 C# 项目构建安装程序失败

我在 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

1
推荐指数
1
解决办法
2256
查看次数

使用 C# Winforms 而不是安装程序工具创建 Windows 安装程序

我以前使用过InstallAware和InstallShield,它们很难使用,当出现问题时很难找到并解决问题。

我的问题是为什么我们不能使用 C# 编写的 Windows 应用程序来执行此操作。我知道 .Net Framework 可能不会安装在目标计算机上,所以我想知道为什么没有人使用过这种架构:我将使用 IntallSiheld(或任何其他类似工具)创建一个简单的安装程序来安装 .Net Framework,然后它提取并运行我自己的 Windows 应用程序,该应用程序是我在提升模式下使用 C# 编写的。我的应用程序将运行一个带有“后退”和“下一步”按钮的向导,我将处理其中的所有内容(复制文件、创建和启动 Windows 服务、添加注册表值、创建防火墙扩展等)。有人曾经这样做过吗?有什么事情吗?阻止人们这样做?

windows windows-installer installshield installaware winforms

0
推荐指数
1
解决办法
4342
查看次数