2010-06-29 94 views
0

我使用VS2010和WIX 3.5。WIX c#CustomAction,我做错了什么?

1)我创建了WIX Setup Project。

2)然后我加入到溶液C#自定义操作项目,并把它称为“CustomActions”

namespace CustomActions 
{ 
    public static class CustomActions 
    { 
    [CustomAction] 
    public static ActionResult CustomAction1(Session session) 
    { 
     Debugger.Break(); 
     MessageBox.Show("It works"); 
     session.Log("Begin CustomAction1"); 
     return ActionResult.Success; 
    } 
    } 
} 

3)然后我编译CustomActions项目,并从我的安装项目添加引用。

4)最后放入.wxs文件:

<Binary Id="CustomActions" SourceFile="$(var.CustomActions.TargetDir)$(var.CustomActions.TargetName).CA.dll"/> 

<CustomAction Id="CustomAction1" BinaryKey="CustomActions" DllEntry="CustomAction1" Execute="immediate" /> 

这是行不通的。我究竟做错了什么?请帮帮我。

回答

1

您还需要安排的自定义操作运行

<InstallUISequence> 
     <Custom Action="CustomAction1" After="AppSearch"/> 
    </InstallUISequence> 

而且你要知道,在MSI沙盒限制了很多东西运行。我不相信你对MessageBox.Show的调用会起作用。你将不得不依靠会话记录来代替。

+0

对MessageBox.Show()的调用将工作,如果他引用名称空间System.Windows.Forms并且还添加了指令'Using System.Windows.Forms' – Mario 2010-07-07 21:07:43

+0

我给它一个测试,它确实看起来似乎上班。我不相信它是一个好主意,但是它能完成任务。 :) – 2010-07-07 22:32:43

+0

你应该使用session.Message来显示一条消息,否则你不能保证消息框会在最前面,而不需要更多的编码 – 2011-06-21 04:19:30