现在有两个安装程序,一个老版本,一个新版本,新版本安装后会把老版本的数据库删掉。为了不被删,我在自定义安装中加入了如下代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.IO;
using System.Windows.Forms;
namespace Library
{
[RunInstaller(true)]
public partial class InstallerDB : Installer
{
public InstallerDB()
{
InitializeComponent();
this.BeforeInstall += new InstallEventHandler(ProjectInstaller_BeforeInstall);
}
void ProjectInstaller_BeforeInstall(object sender, InstallEventArgs e)
{
string path1 = "C:\\metabolicbuster.mdb"; //老版本数据库路径
string path2 = "E:\\metabolicbuster.mdb";
if (File.Exists(path1))
{
File.Move(path1, path2);
/*我是想在安装程序运行前把原来的数据库先剪切到E盘,在安装程序安装完了以后
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
File.Move(原数据库路径,新数据库路径);
}
在把原数据库剪切回来把新数据库覆盖掉。
*/
}
else
{
MessageBox.Show("剪切文件不成功");
}
}
}
}
网上的代码说BeforeInstall 是在安装之前执行的,可不管怎样写,它好像每次都是在安装完成以后才执行的。
有没有什么办法可以让它在安装之前就去执行。或者别的办法,在安装的时候判断这个数据库存不存在,存在了就不安装新数据库了。(可以再自定义安装类里面找到我要安装的文件,然后在判断那些文件需要安装或不安装吗?)
急急急......
先谢谢各位了....
5 个解决方案
#1
up
#3
将InstallerDB 加入到必须条件中,另外安装程序有安装前\安装后操作的.
#4
加入到必须条件中?什么意思啊?安装程序好像有个属性【RemovePreviousVersions】是说是否覆盖早期的版本,所以,每一次新安装之后就会把原来的全部覆盖掉了。至于你说的安装之前/后的设置是在那里啊。
#5
不好意思,各位,可能我说的太模糊,其实我刚也看了个帖子,和我的是一样的,【C#安装包升级】:http://topic.csdn.net/u/20090416/15/3b2d3576-57b1-4d8e-8cc2-cb42c002ca00.html
期待各位的回复
期待各位的回复
#1
up
#2
用installshield制作安装包看看
参考
参考
#3
将InstallerDB 加入到必须条件中,另外安装程序有安装前\安装后操作的.
#4
加入到必须条件中?什么意思啊?安装程序好像有个属性【RemovePreviousVersions】是说是否覆盖早期的版本,所以,每一次新安装之后就会把原来的全部覆盖掉了。至于你说的安装之前/后的设置是在那里啊。
#5
不好意思,各位,可能我说的太模糊,其实我刚也看了个帖子,和我的是一样的,【C#安装包升级】:http://topic.csdn.net/u/20090416/15/3b2d3576-57b1-4d8e-8cc2-cb42c002ca00.html
期待各位的回复
期待各位的回复