Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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

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
C# WiX自定义操作过早结束_C#_Wix_Custom Action_Wix3.8 - Fatal编程技术网

C# WiX自定义操作过早结束

C# WiX自定义操作过早结束,c#,wix,custom-action,wix3.8,C#,Wix,Custom Action,Wix3.8,关于这个话题有很多问题,我尝试了所有的解决方案,但没有一个对我有效 问题是,它在安装了visual studio的计算机上“确实”工作,但在其他pc上不工作。。使调试变得非常困难 自定义操作代码为: [CustomAction] public static ActionResult EnumerateSqlServers(Session session) { MessageBox.Show("start EnumerateSQLServers"); // the message is n

关于这个话题有很多问题,我尝试了所有的解决方案,但没有一个对我有效

问题是,它在安装了visual studio的计算机上“确实”工作,但在其他pc上不工作。。使调试变得非常困难

自定义操作代码为:

[CustomAction]
public static ActionResult EnumerateSqlServers(Session session)
{
    MessageBox.Show("start EnumerateSQLServers"); // the message is not showing.
    ActionResult result;
    DataTable dt = SmoApplication.EnumAvailableSqlServers(false);
    DataRow[] rows = dt.Select(string.Empty);//, "IsLocal desc, Name asc");
    result = EnumSqlServersIntoComboBox(session, rows);
    return result;
}
日志文件显示:

MSI (c) (2C:1C) [11:16:42:338]: Doing action: EnumerateSqlServersAction
Action 11:16:42: EnumerateSqlServersAction. 
Action start 11:16:42: EnumerateSqlServersAction.
MSI (c) (2C:34) [11:16:42:385]: Invoking remote custom action. DLL: C:\Users\Test\AppData\Local\Temp\MSI9328.tmp, Entrypoint: EnumerateSqlServers
MSI (c) (2C:E8) [11:16:42:385]: Cloaking enabled.
MSI (c) (2C:E8) [11:16:42:385]: Attempting to enable all disabled privileges before calling Install on Server
MSI (c) (2C:E8) [11:16:42:385]: Connected to service for CA interface.
Action ended 11:16:42: EnumerateSqlServersAction. Return value 3.
DEBUG: Error 2896:  Executing action EnumerateSqlServersAction 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: EnumerateSqlServersAction, , 
Action ended 11:16:42: WelcomeDlg. Return value 3.
MSI (c) (2C:44) [11:16:42:635]: Doing action: FatalError
Action 11:16:42: FatalError. 
Action start 11:16:42: FatalError.
Action 11:16:42: FatalError. Dialog created
Action ended 11:16:43: FatalError. Return value 2.
Action ended 11:16:43: INSTALL. Return value 3.
MSI (c) (2C:44) [11:16:43:370]: Destroying RemoteAPI object.
MSI (c) (2C:E8) [11:16:43:385]: Custom Action Manager thread ending.
我确实尝试过这样一个空洞的动作:

 [CustomAction]
        public static ActionResult CustomAction1(Session session)
        {
            MessageBox.Show("");
            return ActionResult.Success;
        }
这个动作有效!它显示一个空的消息框

编辑:经过大量测试,我在评论这一行时发现问题出在enumSQLServer上

SmoApplication.EnumAvailableSqlServers(false);

使用详细(/l*v)设置记录安装程序。我希望看到更多,包括.NET错误堆栈跟踪。您可能缺少visual studio计算机上的依赖项,但不是干净的测试计算机上的依赖项


最可能缺少的依赖项是Microsoft.SqlServer.Smo.dll。在自定义操作项目中,检查此引用是否设置为CopyLocal=true,如果未设置,则将其设置为true

您是否已尝试使用提升的权限运行安装程序(右键单击安装程序并选择“以管理员身份运行”)

据我所知,SmoApplication.EnumAvailableSqlServers(false)需要提升权限

还要检查.wxs文件中产品节点中自定义操作的定义

以下定义应适用:

出于测试目的,请尝试以下操作:


未安装

在我的例子中,这是在安装和卸载时发生的

我们正在做的是加密作为参数传入的连接字符串

安装

这失败了,因为我无法访问我们仍在处理的已安装配置文件。我希望WiX更易于使用或者有更好的文档

卸载

因为我们没有自定义操作的任何条件,所以它也在卸载期间运行,并且在尝试加载不再存在的配置文件时失败


解决方案:使用未安装的
和未删除的

谢谢你的日志设置,我会试试。你会发现EnumAvailableSqlServers抛出了一个错误。您也可以将其放入try-catch块并记录或显示错误。问题是,在独立的exe中,相同的代码工作正常。在自定义操作中,它在进入该子项之前崩溃,远远早于该行。Hmmm,我以前从未听说过“在我的EXE中工作”行。:)调用静态方法的DTF代码将所有内容包装在它自己的try-catch中,并将其记录到MSI。执行详细日志并查看结果。安装总是使用提升的权限完成的。我来看看其他的建议。谢谢