Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在MSI中运行Wix自定义操作_Wix_Windows Installer_Custom Action - Fatal编程技术网

无法在MSI中运行Wix自定义操作

无法在MSI中运行Wix自定义操作,wix,windows-installer,custom-action,Wix,Windows Installer,Custom Action,我正在尝试为我的Wix安装创建一个自定义操作,但它不起作用,我不确定为什么 以下是相应Wix文件中的位: <Binary Id="INSTALLERHELPER" SourceFile=".\Lib\InstallerHelper.dll" /> <CustomAction Id="HelperAction" BinaryKey="INSTALLERHELPER" DllEntry="CustomAction1" Execute="immediate" /> 该操作通过

我正在尝试为我的Wix安装创建一个自定义操作,但它不起作用,我不确定为什么

以下是相应Wix文件中的位:

<Binary Id="INSTALLERHELPER" SourceFile=".\Lib\InstallerHelper.dll" />
<CustomAction Id="HelperAction" BinaryKey="INSTALLERHELPER" DllEntry="CustomAction1" Execute="immediate" />
该操作通过在UI中按下按钮来运行(目前):

它给我的两个错误代码或消息都不足以告诉我出了什么问题。也许我只是不明白他们说的是错的

起初我认为这可能是因为我使用的是WIX3.5,所以为了确保我尝试使用WIX3.0,但我得到了相同的错误


有没有关于我做错了什么的想法?

通过
DoAction
启动的自定义操作无法写入日志文件

当我第一次开始使用WiX时,这也让我感到困惑


如果要查看发生了什么,可以在自定义操作开始时使用
System.Diagnostics.Debugger.Launch()
。这将提示您将Visual Studio附加到进程,以便对其进行调试。

对于自定义操作程序集,您需要一个配置文件,并将
useLegacyV2RuntimeActivationPolicy
属性设置为
true
。确保将配置文件命名为
CustomAction.config
。如果你不这样做,那就行不通了。我假设您正在.NET4框架上运行


有关更多信息,请参阅。另外,正如AntonyW已经指出的,fuslogvw.exe在这个场景中非常有用。

对我来说,是我的CustomAction DllEntry与我的方法名称不匹配。i、 e

<CustomAction Id="CheckingPID" BinaryKey="CheckPID.CA" DllEntry="BadValue" />

public static ActionResult CheckPID(Session session)

公共静态操作结果检查PID(会话)

您是否尝试更改自定义操作DLL上的运行时库设置?调试模式选项/MDD和/MTD需要C++运行时的调试版本,这在生产机器上是不可用的(对于它们来说没有可再分发的许可证)。如果您使用/MD编译器选项,您可能还需要安装在用户机器上需要的VisualStudioC++运行时版本,这里有一个合并模块:.< /p> ,而不是引用.dll引用CA.dll。它对我起作用。

当安装程序项目配置/平台分别设置为debug/x64和自定义操作项目配置/平台分别设置为debug/x86时,会出现此错误

更正平台设置以为同一平台生成项目

就我而言,改变柏拉图解决了这个问题

谢谢
Yogesh

还有一个可能的答案-您可能指定了正确的CA DLL,并指定了正确的方法,但如果该方法未使用[CustomAction]修饰,您将收到该错误

但是,他们可以写入目标计算机上的文件!Debugger.Launch()没有为我做任何事情。@jcmcbeth默认情况下,Windows 8及更高版本配置为阻止在其他用户会话中启动调试器。要解决此问题,可以通过在命令行中运行以下命令来删除该标志:
reg add“HKCR\AppID\{E62A7A31-6025-408E-87F6-81AEB0DC9347}”/v AppIDFlags/t reg_DWORD/d 8/f
要恢复默认值,请运行以下命令:
reg add“HKCR\AppID\{E62A7A31-6025-408E-87F6-81AEB0DC9347}”/v AppIDFlags/t reg_DWORD/d 40/f
“无法运行完成此安装所需的DLL。“-这表示安装程序找到了dll,但在其中找不到方法。您提到您在发布日志后更改了代码-您可以发布更新的日志吗?你是如何运行日志的?你是如何运行/l*vx选项的?啊,最后,我也是这么做的。这正是发生在我身上的事情。我创建了一个名为“Company.CA”的项目,它生成了“Company.CA.dll”。但后来WiX把所有东西都塞进了“Company.CA.CA.dll”,我没有注意到。我在上面浪费了整整一个小时!
  <Control Id="Next" Type="PushButton" X="248" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)" >
      <Publish Event="DoAction" Value="HelperAction">1</Publish>
  </Control>
MSI (c) (08:5C) [10:08:36:978]: Connected to service for CA interface.
MSI (c) (08:4C) [10:08:37:030]: Note: 1: 1723 2: SQLHelperAction 3: CustomAction1 4: C:\Users\NATHAN~1.TYL\AppData\Local\Temp\MSI684F.tmp 
Error 1723. There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor.  Action SQLHelperAction, entry: CustomAction1, library: C:\Users\NATHAN~1.TYL\AppData\Local\Temp\MSI684F.tmp 
MSI (c) (08:4C) [10:08:38:501]: Product: SessionWorks :: Judge Edition -- Error 1723. There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor.  Action SQLHelperAction, entry: CustomAction1, library: C:\Users\NATHAN~1.TYL\AppData\Local\Temp\MSI684F.tmp 

Action ended 10:08:38: SQLHelperAction. Return value 3.
DEBUG: Error 2896:  Executing action SQLHelperAction failed.
The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2896. The arguments are: SQLHelperAction, , 
<CustomAction Id="CheckingPID" BinaryKey="CheckPID.CA" DllEntry="BadValue" />

public static ActionResult CheckPID(Session session)