在vs2010安装项目中自定义安装

时间:2013-10-14 03:29:44

标签: visual-studio-2010 installer windows-installer visual-studio-setup-proje

全部,我正在尝试向Custom Action添加VS2010 SetUp Project。我想要做的是在安装过程中显示我的自定义win-form。我想将自定义win-form显示为模式对话框,以便用户在安装过程中不能忽略它。到目前为止,我从System.windows.forms.IWin32Window继承了我的安装类。但我不知道如何实现界面的get成员public IntPtr Handle

我所做的就是下面。请帮忙查看。谢谢。

 [RunInstaller(true)]
    public partial class MyInstaller : System.Configuration.Install.Installer,IWin32Window
    {
        public MyInstaller ()
        {
            InitializeComponent();
        }


        [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
        public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);
        }

        [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
        protected override void OnAfterInstall(IDictionary savedState)
        {
            base.OnAfterInstall(savedState);

        }


        [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
        public override void Commit(IDictionary savedState)
        {
            base.Commit(savedState);
            Form frm = new frmSelectSource();
            frm.ShowDialog(this);
        }

        [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
        public override void Rollback(IDictionary savedState)
        {
            base.Rollback(savedState);
        }

        [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
        public override void Uninstall(IDictionary savedState)
        {
            base.Uninstall(savedState);
        }

        [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
        protected override void OnCommitted(IDictionary savedState)
        {
            base.OnCommitted(savedState);

        }

        public IntPtr Handle
        {
            get { throw new NotImplementedException(); }
        }
    }

我不知道这是否是一种正确的方法。如果它是错的或不可能的话。请亲切地告诉我。感谢。

1 个答案:

答案 0 :(得分:1)

这是从VS2012中删除visual studio部署项目的众多原因之一。 VDPROJ只能在安装执行序列的延迟阶段安排自定义操作。这不是执行用户交互的合适位置。 Windows Installer旨在首先在安装用户界面序列中执行UI,然后将控制权转移到执行序列。在静默安装中,仅执行执行序列。

如果你需要自定义用户界面,你需要走一条非常复杂的MSI后期操作之路来注入VDPROJ未公开的功能,或者切换到公开的InstallShield Professional Edition的Windows Installer XML(WiX)等工具此

有关MSI的更好理解,请参阅以下内容:

Installation Phases and In-Script Execution Options for Custom Actions in Windows Installer