【问题标题】:EXE file is not workingEXE 文件不工作
【发布时间】:2018-02-06 20:17:00
【问题描述】:

我的项目中有一个 .msi(Windows 安装程序包)文件。我成功地从 .msi 文件生成了 .exe 文件,但是每当我尝试打开该 .exe 文件或以管理员身份运行时,它什么都不做。如何解决这个问题?任何事情都会对此有所帮助。请帮忙

更新 这是我的 .msi 文件代码

components.wxs

    <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">

    <?include Defines.wxi?>

    <Fragment>

    <ComponentGroup Id="MenuComponents" Directory="ProductMenuFolder">
    <Component Id="ProductMenuComponents" Guid="*">

    <!--<Shortcut Id="UninstallPackage" Directory="ProductMenuFolder" Name="Uninstall package"
          Target="[System64Folder]msiexec.exe" Arguments="/x {[ProductCode]}" Description="Uninstalls $(var.YourApplicationReference.TargetName)"/>-->
<RemoveFolder Id='ProductMenuFolder' On='uninstall' />
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' 
Type='string' Value='' KeyPath='yes' />

   </Component>
   </ComponentGroup>

   <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
   <Component Id="FileWatcher">
   <File Source="$(var.FileWatcher.TargetPath)" />

   <!--Register this file as a Windows service-->
   <ServiceInstall Id="ServiceInstaller"
                Type="ownProcess"
                Description="Sends Incoming mainframe files to the  Webservice"
                DisplayName="FileWatcher"
                Vital="yes"
                Start="auto"
                ErrorControl="ignore"
                Interactive="no"
                Name="FileWatcher"
                Account="[ACCOUNT]"
                Password="[PASSWORD]">

      <ServiceConfig Id="svcConfig" DelayedAutoStart="yes" OnInstall="yes" OnReinstall="yes" OnUninstall="no" />
</ServiceInstall>

     <!--Set the user to be used by the service-->
     <util:User Id="ServiceUser" Name="[ACCOUNT]" Password="[PASSWORD]" CreateUser="no" LogonAsService="yes" UpdateIfExists="yes" />

     <!--Added example of how to stop service automatically-->
     <ServiceControl Id="ServiceControl" Stop="both" Remove="uninstall" Name="FileWatcher" Wait="yes" />
     </Component>
     <Component Id="FileWatcher.Files" Guid="*">
     <!--<Component Id="MAIDFileWatcher.Files" Guid="*">-->
     <File Id="filB93E7D71690869B9CD2D0A479DB69C6C" Source="$(var.FileWatcher.TargetDir)\ExceptionHandling.dll"  />
    <File Id="fil487232F7A833919419AF9537A4390083" Source="$(var.FileWatcher.TargetDir)\ExceptionHandling.xml" />
    <File Id="filDE3649B71309470D2D7C086E0FAABAE8" Source="$(var.FileWatcher.TargetDir)\itextsharp.dll"  />
    <File Id="filF73350F1AEF9ECF2621D4E63B9823029" Source="$(var.FileWatcher.TargetDir)\FileWatcher.exe.config"  KeyPath='yes'/>
    </Component>
    </ComponentGroup>

product.wxs

   <?xml version="1.0" encoding="UTF-8"?>
   <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

   <?include Version.wxi?>
   <?include Defines.wxi?>

   <Product Id="$(var.PRODUCTCODE)" Name="$(var.PRODUCTNAME)" Language="1033" Version="$(var.REVISION)" Manufacturer="$(var.MANUFACTURER)" UpgradeCode="$(var.UPGRADECODE)">

   <Package InstallerVersion="400" Compressed="yes" InstallScope="perMachine" Comments="$(var.COMMENTS)" Description="$(var.DESCRIPTION)" />

   <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
   <MediaTemplate EmbedCab="yes" />

   <Feature Id="ProductFeature" Title="$(var.PRODUCTNAME)" Level="1">
    <ComponentGroupRef Id="ProductComponents" />
    <ComponentGroupRef Id="MenuComponents"/>
   </Feature>

   <UIRef Id="USERUI" />

   <?include Actions.wxi?> 

   </Product>

   </Wix>

【问题讨论】:

  • 嗨,感谢@mjwills 的回复 :)。我用代码更新了我的问题
  • 你卸载了什么?如果是这样,你有没有重新启动?看来您正在安装服务。如果 Windows 安装程序希望卸载某项服务,那么您无法重新安装新版本,直到您重新启动以完成旧版本的卸载(取决于您的操作方式)。

标签: c# wix exe windows-installer


【解决方案1】:

您可以使用如下命令行调试 msi 安装:

msiexec /i someapplication.msi /L*vx log.txt

这将运行安装程序并将日志信息输出到名为 log.txt 的文件中。

另请参阅:Windows Installer Command Line Options

【讨论】:

  • 嗨@Wyck 感谢您的回复:)。我是新手。我需要生成 log.txt 文件以在安装 .msi 文件时获取错误?我说的对吗?
  • 没错。用于查看安装过程中出现的问题。例如,您声称“它什么都不做”。此命令行将尝试进行安装,然后日志将显示发生的情况或停止的位置。
  • 我不清楚安装日志是否会有所帮助。安装将工作或完全回滚。如果已安装的 exe 存在但无法运行,则安装日志不会告诉您原因。描述似乎表明启动 exe 会导致立即崩溃,这可能是由于缺少依赖项或脆弱的编码。
  • exe 导致立即崩溃,你是对的@PhilDW
【解决方案2】:

另一个专业提示是在虚拟机中调试您的安装程序。在安装之前拍摄快照,以便您可以回滚,或在更改代码后重复安装并从可重现的状态开始。我无法想象没有 Hyper-V 的情况下调试安装程序 - 这对我来说很重要。

【讨论】:

    【解决方案3】:

    这基本上只是从臀部射击,请忽略不相关的内容(可能先检查最后三个要点):

    最佳实践:首先,您要使用单个组件安装多个二进制文件。这违反了component creation best practice

    • 对于这么小的东西,我建议您每个文件使用一个组件。这解决了未来的各种补丁、升级和其他问题。

    • What happens if the component rules are broken? 请略读这个,或者相信我们的话,每个组件只使用一个文件。至少为所有二进制文件制作一个单独的组件(必需)。

    • 关于组件 GUID 的性质和理念的一些小插曲:Change my component GUID in wix? 一些人发现了解神秘且总是很麻烦的组件 GUID 很有帮助。

    • 如果您坚持每个组件使用多个文件,请确保该组件的密钥文件是版本化文件。我认为 WiX 会自动实现这一点。

      • 如果您没有版本控制的密钥文件,如果目标位置中已有文件,您可能会面临根本无法安装组件的风险。

      • 如果您确实有一个版本化的密钥文件,请确保您的安装具有比它可能在目标位置(如果有)磁盘上遇到的二进制文件更高版本的二进制文件。请阅读 the MSI file versioning rules 以获得解释。

    日志记录:您的应用程序是否具有可用于调试的日志功能(默认情况下,或者您可以启用的功能)?也许到系统的事件日志?服务不会写在那里吗?

    依赖关系:另外,你检查过我之前提供的关于依赖检查的指针吗? C# Debug folder when copied to another location does not run the exe.

    服务凭据:您确定这些登录凭据在安装过程中得到应用吗?

    • 您是否尝试手动设置它们以查看服务是否会运行?您是否将这些属性添加到SecureCustomProperties 允许传递到延迟安装模式的属性列表中?
    • 我认为 WiX 在这里有“自动魔法”并为您执行此操作,我忘记了。在最终编译的 MSI using an appropriate tool, for example Orca 的属性表中检查 SecureCustomProperties。
    • 使用延迟服务启动设置,服务是否还在运行? (至少得提一下)。还是您说它在启动时崩溃?

    硬编码引用:指向缺失资源的指针。

    • 您是否检查了所有 清单文件配置文件 (FileWatcher.exe.config) 是否有任何指向开发人员框资源的时髦内容(错误的硬编码引用)?
    • 会不会缺少资源文件? (图像、dll 等...)。

    架构和运行时要求:目标计算机是否与您的开发计算机相同架构?只是为了把它记下来,你肯定会看到关于这个的警告吗?

    • 您的代码所针对的 CPU 是什么?有CPU吗?您是否尝试在另一台机器(可能是干净的虚拟机)上手动注册文件。
    • 目标计算机有什么特别的问题吗?它有奇怪的政策吗?它是否有安全软件阻止事物?它是否缺少安装在您的开发计算机上的通用运行时组件? (.NET、VC++ 运行时、VC 运行时、java 等...)。这些是procmon.exe 会话应该显示的内容,或者使用 Dependencies.exe 进行的检查应该显示的内容。
    • 你在使用臭名昭著的FileSystemWatcher .NET 类吗?多年前我只用过一次,但它给我带来了很多悲伤,我不得不停止使用它。它确实经常使我的服务文件崩溃。

    【讨论】:

      【解决方案4】:
      • 当我在 %PROGRAMDATA% 下安装我的 EXE 时,我遇到了同样的问题
      • 当我在 %PROGRAMFILES% 下安装我的 EXE 后,问题就解决了

      【讨论】:

      • 这表示一个简单的 ACL 权限问题。换句话说,应用程序没有对该文件夹的写入权限,它通常需要它来写入某些设置文件。我猜 OP 的服务凭证有问题 - 可能。
      猜你喜欢
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多