有没有办法读取msi文件中的属性?
例如,给定一个msi文件名Testpackage.msi
我需要找到
productName
PackageCode
version
Run Code Online (Sandbox Code Playgroud)
我将使用它与WMI卸载
string objPath = string.Format("Win32_Product.IdentifyingNumber='{0}',Name='{1}',Version='{2}'", "{AC9C1263-2BA8-4863-BE18-01232375CE42}", "testproduct", "10.0.0.0");
Run Code Online (Sandbox Code Playgroud)
更新:使用Orca是一个很好的选择,如果这可以以编程方式实现,那么我可以使用它来生成自动发行说明.并且在卸载程序中也是如此.
我有一个相当大的项目,包含多个类、500 多个图像以及与该项目关联的 20 多个文本文件。
我一直通过右键单击project->properties并单击发布选项卡来发布我的项目。我已经包含了文本文件和图像resources。
问题是,每当我安装一个应用程序时,通常它是一个简单的安装程序,即您下载一个安装程序(一个文件,例如 installer.exe),运行此文件,然后该文件将引导您完成安装过程,例如将其安装到哪里,等等。然后应用程序就安装好了。
好吧,在发布我的应用程序时,我指定了一个输出目录,然后留下了这些文件:
MyProjectName.application(清单?)如果我运行setup.exe,我就可以安装该应用程序并毫无问题地运行它。但是,它不仅不允许我选择安装位置,而且我还必须将所有这 3 个文件发送给用户。我试图将 发送setup.exe给朋友,但它说他们缺少所需的文件(我假设这就是 和 的application files用途.application)。
我如何将这些全部集中到一个安装程序中,一个更接近您安装企业应用程序的方式(考虑安装 chrome、eclipse、photoshop 等)?
我希望能够拥有一个安装程序文件并能够让用户下载该文件。
谢谢
我通过一些在线教程学习了 WiX 几天。我看到了三种创建一些变量的情况
<? define Variable = "value" ?>然后将该值用作$(var.Variable)<String Id="Variable">Value</String>,然后使用值作为!(loc.Variable)<Property Id="VARIABLE" Value="value" />,然后包含该文件,使用 Fragment 中的属性为[VARIABLE] 我知道本地化文件主要用于不同的语言环境。但我不知道我们什么时候应该使用每种情况。谁能帮忙解释一下吗?
我正在尝试为 asp.net core 创建一个 MSI 安装程序作为 Windows 服务。
我通过使用以下链接成功创建了托管 asp.net core 应用程序的窗口服务
1)https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-2.2
2)https://dzone.com/articles/running-aspnet-core-application-as-windows-service
但我想创建一个 MSI 文件(Visual Studio 安装程序),该文件将由最终用户安装。我将无法使用第三方安装程序,即 Wix、Advance Installer 等。
任何人都可以指导/帮助我如何创建 MSI 文件,安装后它会自动启动窗口服务,或者我看向错误的方向?
我们正在尝试为我们的产品部署更新,其中包含更新的 dll。该 dll 也有一个版本号,因此通常安装程序应该能够看到它并替换旧的 dll。
Windows 安装程序在检查版本号时只关心前三个数字。然而,在这种情况下,更新后的版本号看起来与第四个版本号相同。例如,如果前一个版本为 1.0.0.12,则此版本为 1.0.0.20,因此安装程序会将它们视为相同版本,并且不会替换该文件。在这种情况下,我无法控制版本编号,并且由于我们包含了很多 dll,因此将来可能会再次发生这种情况。
无论版本号是否相同,如何让安装程序替换该文件?
在搜索不同的解决方案后,我尝试告诉安装程序在安装过程中删除该文件。如果没有必要,我不想删除所有文件。到目前为止,我已经尝试了包含的代码片段中所示的解决方案。该版本的安装程序中新增了删除文件元素。
<Component Id="SomeComponent" Win64="yes" Guid="*">
<File Id="SomeFile" KeyPath="yes" Source="$(var.app.TargetDir)\some.dll" />
<RemoveFile Id="RemoveSomeFile" Name="some.dll" On="install"/>
</Component>
Run Code Online (Sandbox Code Playgroud)
我期望的结果是旧的 dll 被新的 dll 替换,但是安装后旧的 dll 仍然存在,没有新的 dll。
我想一些具有在 Windows 桌面上交付 Java 应用程序经验的 Java 专家将能够胜过这一点。我一直是一名 Mac/Linux Java 开发人员,所以这对我来说是一个未知的领域:-/。
我必须编写一个 Java 8 Swing 应用程序并将其安装在 Windows 10(64 位)机器上。我Gameplan的是打包的应用程序作为一个可执行的JAR文件和包裹它Launch4J,所以它看起来像一个地道的Windows EXE(.exe文件)。然而,它比分布更复杂一点:
myapp.exe(从 构建myapp.jar)myapp.logmyapp.propertiesMyApp User Guide.html让我们假设机器上已经安装了 Java 8 JRE/JDK,所以我们不需要担心安装 Java 本身。
安装过程必须简单,包括:
此外,如果可能的话,我希望安装过程包括:
鉴于所有这些,我想知道在现代 Windows 10/Java/Launch4J 环境中我的选择是什么。是否有工具可以帮助我快速编写 MSI 脚本,或者我是否必须用 C#/.NET 编写自己的脚本并将其作为单独的二进制文件/项目?如果 MSI 不是一个选项,那么存在哪些选项可能会击中我上面的所有项目?
我意识到我可以将整个内容作为 ZIP 分发,并且安装过程如下所示:
如果未安装 NetCore 3.1(预览版),我想取消安装
我创建这个 CustomAction :
using Microsoft.Deployment.WindowsInstaller;
using Microsoft.Win32;
namespace WixCustomAction
{
public class CustomActions
{
[CustomAction]
public static ActionResult CheckDotNetCore31Installed(Session session)
{
session.Log("Begin CheckDotNetCore31Installed");
RegistryKey lKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost");
var version = (string)lKey.GetValue("Version");
session["DOTNETCORE31"] = version == "3.1.0-preview3.19553.2" ? "1" : "0";
return ActionResult.Success;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在 WXS 文件中:
<<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<Product ...>
(...)
<Property Id="DOTNETCORE31">0</Property>
<Condition Message="You must first install the .NET Core 3.1 Runtime">
Installed OR DOTNETCORE31="1"
</Condition>
<InstallExecuteSequence>
<Custom Action="Check.NetCore" Before="LaunchConditions">NOT …Run Code Online (Sandbox Code Playgroud) 当我尝试在 Windows Server 2012 R2 上安装 EXE 文件时遇到问题。当我尝试执行 EXE 或 MSI 文件时,出现以下错误:“无法访问 Windows Installer 服务。如果未正确安装 Windows Installer,则可能会发生这种情况。请联系您的支持人员寻求帮助。”
我尝试了以下方法来解决该问题,但没有任何效果。
方法一:
我尝试取消注册并重新注册 msiexec 文件
%windir%\system32\msiexec.exe /取消注册
%windir%\system32\msiexec.exe /regserver
%windir%\syswow64\msiexec.exe /取消注册
%windir%\syswow64\msiexec.exe /regserver
方法二
净停止MSI服务器
REG ADD“HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\MSIServer”/VE /T REG_SZ /F /D“服务”
净停止MSI服务器
REG ADD“HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\MSIServer”/VE /T REG_SZ /F /D“服务”
网络启动MSI服务器
方法三
浏览注册表编辑器找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\msiserver。创建了以下密钥 WOW64 REG_DWORD 0x00000000
我确实在每种方法之后重新启动了服务器,甚至尝试将注册表项从工作服务器导出到问题服务器。尽管如此,问题仍未解决。
我可以尝试解决该问题吗?还有其他解决方案吗?我不想从头开始重建服务器。
我正在尝试使用 Wix 和 Visual Studio 2019 创建一个安装程序。我是 Wix 新手,所以我刚刚开始从头开始做一些非常简单的工作。因此,我读了这个解释。我使用 Windows 10 内部版本 19042。
创建 winforms 项目对我来说确实工作得很好,但下一个项目却不行。正是因为这一步。
在项目类型树中选择Windows Installer XML 节点,然后选择安装项目
我可以找到 Wix 项目。
我安装了 Wix 工具集。
因此创建一个非常简单的安装程序应该非常简单。但事实上,这并不是因为我未能完成涉及我找不到的项目类型的教程步骤。
您可以通过以下方式提供帮助:
从逻辑上讲,我仔细检查了Windows Installer XML 节点是否真的不存在。事实并非如此。
我正在使用 Visual Studio 2017 中的“Visual Studio 安装程序”项目类型为我的应用程序创建安装程序。
我希望我的安装程序使用我的应用程序安装 Visual C++ Redistributable 2015。我已经下载了该vc_redist.x86.exe文件,并将其包含在我的项目中,并且我正在尝试将安装作为“安装”上的自定义操作进行。我是带着论点发起的/install /passive /norestart。
当我执行安装程序时,当它执行自定义操作时,我收到此错误:
此 Windows 安装程序包有问题。作为安装一部分运行的程序未按预期完成。请联系您的支持人员或软件包供应商。
我可以vc_redist.x86.exe /install /passive /norestart在命令提示符下运行,没有任何问题或错误。
有什么建议或替代方法可以将 Visual C++ 可再发行组件包含在我的安装中吗?
installation redistributable visual-studio-setup-proje visual-studio-2017