none
vsto部署包含数据库文件的问题 RRS feed

  • 问题

  • 在msdn找到几篇关于clickonce包括数据文件的指导都失败了

    首先excel插件项目在项目设计器的发布页没有“应用程序文件”按钮,

    在mageUI里打开应用程序清单添加数据库文件保存时提示没有入口点,尝试把.dll或者.vsto设成入口点都报错。

    2016年6月1日 6:12

答案

  • Hi,

    那我把那个博客中相关步骤说明下吧:

    1. 从以下链接下载AccessDataBaseEngine,当然有现成可用的也行
    http://www.microsoft.com/downloads/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en

    2. 添加AccessDataBaseEngine到你的安装项目

    打开文件系统编辑你的安装项目

    把AccessDatabaseEngine.exe添加到你的程序文件夹.

    3. 如同你没有添加Installer的话添加一个到你的主程序,并且确认已经把RunInstaller属性设置为true [RunInstaller(true)]





    4. 覆盖Installer类中的Install方法

    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);
    }

    5. 生成Afterinstall方法并添加下面那些代码到方法中来调用安装access database engine

    private void Installer1_AfterInstall(object sender, InstallEventArgs e)
    {
        string str = System.Reflection.Assembly.GetExecutingAssembly().Location;
        string accessComponentFile = "AccessDatabaseEngine.exe";
    
    
        int indx = str.LastIndexOf('\\');
        str = str.Substring(0, indx);
    
    
        System.Diagnostics.Process prc = new System.Diagnostics.Process();
        try
        {
          prc.StartInfo.FileName = str + "\\" + accessComponentFile;;
          prc.StartInfo.Arguments = "/quiet";
          prc.Start();
          prc.EnableRaisingEvents = true;
          prc.Exited += new EventHandler(prc_Exited);
        }
        catch (Exception ex)
        {
          System.Windows.Forms.MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
    
     The prc.StartInfo.Arguments = "/quiet"; installs the access database engine in silent mode.

    6. 安装完成后那个安装包文件就可以从客户端上删除了。

    下面这段代码是用来清理安装包的,记得在afterinstall方法中调用。

    void prc_Exited(object sender, EventArgs e)
    {
        string str = System.Reflection.Assembly.GetExecutingAssembly().Location;
        string accessComponentFile = "AccessDatabaseEngine.exe";
        int indx = str.LastIndexOf('\\');
        str = str.Substring(0, indx);
    
        string FolderPath = str + "\\" + accessComponentFile;
        if (File.Exists(FolderPath))
        {
          try
          {
            File.Delete(FolderPath);
          }
          catch (Exception ex)
          {
          }
        }
    }

    Regards,

    Moonlight


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2016年6月6日 2:59

全部回复

  • 可否将“数据文件”作成嵌入的资源到当前程序集中,这样避免部署时"数据文件"找不到

    如果是可修改的“数据文件”,用一个相对固定的路径,比如Documents\App_Name\


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年6月1日 6:50
  • 数据库文件需要要读写。

    第二种方法意思就是打包时不管数据库文件,安装完手动拷贝数据库文件到某个目录下吗?目前确实是这么处理的,这种项目是不是不能将数据文件包括到clickonce

    2016年6月1日 7:59
  • Hi dnzhi,

    你可以尝试参考以下步骤(自定义安装操作):

    1. 添加 'AccessDatabaseEngine' 文件到应用程序目录.

    2. 添加 ‘Installer class’ 到你的项目中,设置RunInstaller(true).

    3. 重写Install方法并生成’after install‘事件.

    范例:

    [RunInstaller(true)]
    
        public partial class InstallerAccessDataBase : System.Configuration.Install.Installer
    
        {
    
            public InstallerAccessDataBase()
    
            {
    
                InitializeComponent();
    
            }
    
            public override void Install(IDictionary stateSaver)
    
            {
    
                base.Install(stateSaver);
    
            }
    
            private void InstallerAccessDataBase_AfterInstall(object sender, InstallEventArgs e)
    
            {
    
                string str = System.Reflection.Assembly.GetExecutingAssembly().Location;
    
                string accessComponentFile = "AccessDatabaseEngine.exe";//your AccessDatabaseEngince
    
                int indx = str.LastIndexOf('\\');
    
                str = str.Substring(0, indx);
    
                System.Diagnostics.Process process = new System.Diagnostics.Process();
    
                try
    
                {
    
                    process.StartInfo.FileName = str + "\\" + accessComponentFile; ;
    
                    process.StartInfo.Arguments = "/quiet";
    
                    process.Start();
    
                    process.EnableRaisingEvents = true;
    
                    process.Exited += new EventHandler(process_Exited);
    
                }
    
                catch (Exception ex)
    
                {
    
                    System.Windows.Forms.MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
                }
    
            }
    
            void process_Exited(object sender, EventArgs e)
    
            {
    
                string str = System.Reflection.Assembly.GetExecutingAssembly().Location;
    
                string accessComponentFile = "AccessDatabaseEngine.exe";
    
                int indx = str.LastIndexOf('\\');
    
                str = str.Substring(0, indx);
    
                string FolderPath = str + "\\" + accessComponentFile;
    
                if (File.Exists(FolderPath))
    
                {
    
                    try
    
                    {
    
                        File.Delete(FolderPath);
    
                    }
    
                    catch (Exception ex)
    
                    {
    
                    }
    
                }
    
            }
    
        }
    

    关于更多详细信息你可以参考以下链接:

    http://techieyogi.blogspot.com/2009/11/installing-access-database-engine-with.html

    Regards,

    Moonlight


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2016年6月3日 5:51
  • 看不懂,好歹先说下前面的配置,需要什么库,新建什么项目之类的,那个网址打不开
    2016年6月4日 4:45
  • Hi,

    那我把那个博客中相关步骤说明下吧:

    1. 从以下链接下载AccessDataBaseEngine,当然有现成可用的也行
    http://www.microsoft.com/downloads/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en

    2. 添加AccessDataBaseEngine到你的安装项目

    打开文件系统编辑你的安装项目

    把AccessDatabaseEngine.exe添加到你的程序文件夹.

    3. 如同你没有添加Installer的话添加一个到你的主程序,并且确认已经把RunInstaller属性设置为true [RunInstaller(true)]





    4. 覆盖Installer类中的Install方法

    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);
    }

    5. 生成Afterinstall方法并添加下面那些代码到方法中来调用安装access database engine

    private void Installer1_AfterInstall(object sender, InstallEventArgs e)
    {
        string str = System.Reflection.Assembly.GetExecutingAssembly().Location;
        string accessComponentFile = "AccessDatabaseEngine.exe";
    
    
        int indx = str.LastIndexOf('\\');
        str = str.Substring(0, indx);
    
    
        System.Diagnostics.Process prc = new System.Diagnostics.Process();
        try
        {
          prc.StartInfo.FileName = str + "\\" + accessComponentFile;;
          prc.StartInfo.Arguments = "/quiet";
          prc.Start();
          prc.EnableRaisingEvents = true;
          prc.Exited += new EventHandler(prc_Exited);
        }
        catch (Exception ex)
        {
          System.Windows.Forms.MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
    
     The prc.StartInfo.Arguments = "/quiet"; installs the access database engine in silent mode.

    6. 安装完成后那个安装包文件就可以从客户端上删除了。

    下面这段代码是用来清理安装包的,记得在afterinstall方法中调用。

    void prc_Exited(object sender, EventArgs e)
    {
        string str = System.Reflection.Assembly.GetExecutingAssembly().Location;
        string accessComponentFile = "AccessDatabaseEngine.exe";
        int indx = str.LastIndexOf('\\');
        str = str.Substring(0, indx);
    
        string FolderPath = str + "\\" + accessComponentFile;
        if (File.Exists(FolderPath))
        {
          try
          {
            File.Delete(FolderPath);
          }
          catch (Exception ex)
          {
          }
        }
    }

    Regards,

    Moonlight


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2016年6月6日 2:59