.NET制作的安装程序安装好后如果删除了打包的一个文件,再次通过快截方式启动时会重新安装,怎么不让他安装?
没看懂.NET制作的安装程序安装好后如果删除了(A)打包的一个文件,再次通过快截方式启动(B)时会重新安装,怎么不让他安装?(A) 安装程序里面的  还是安装程序安装的东西
(B) 安装程序        还是安装程序安装的东西将要删除的那个文件的vital改成false就行了吧?

解决方案 »

  1.   

    (A)还是安装程序安装的东西
    (B)还是安装程序安装的东西通过快截方式启动会重新装上,直接双击EXE运行没问题>>将要删除的那个文件的vital改成false就行了吧?还是不行如果是文件夹就没vital属性了
      

  2.   

    我看懂了好象,估计他说的是msi 安装包的完整性自我修复,这是自动的
    当它检测到安装包在注册表中的class 子项、某个依赖库类(包括classID 注册项)找不到或者不完整,就会自动修复,然后才会启动主程序。
    比如office 2k 就有这样的功能,有些ms 的东东已经启用了此功能,在程序启动时会自动scan 注册表的依赖完整,我个人估计这个机制最早是出现在Windows 2000 的 Application Compatibility 机制上发展出来的,你可以用RegMon 监视该程序启动时注册表的读取,在删那个包时保证那个键还在,或者将值改为空试试如果不行,只能在添加删除里去更改,将那个要删除的子项的挑去掉,不让你选的话,别无它法。
      

  3.   

    还是楼上的会表达~~~补充一下:
    1、新键一个《安装项目》;
    2、在《应用程序文件夹》里添加程序集文件(DLL、EXE),并添加了一些初始化的数据文件(XML、TXT);
    3、在《用户桌面》添加一个指向《应用程序文件夹》中主程序(EXE)的快捷方式;
    4、生成、安装5、从桌面快捷方式启动应用程序,程序运行过程中需对前面提到的数据文件进行修改、删除,若删除后,第二次启动应用程序时跳出窗口“准备安装”,删除掉的数据文件被恢复;
    6、若不是从桌面快捷方式启动应用程序,则不存在这个问题
      

  4.   

    简单的方法就是不使用msi 建快捷方式,因为那种快捷方式不是常规的那种,你可见那种是无路径无目标的快捷方式,比如office 2k 或xp 的快捷方式,事实上它是一个msi 定义的classID,类似理解可以比喻过去的regsvr32 所注册的 classID 标志那样。你可以考虑在首次启动时自己建快捷方式,这样就可以避免完整性修复
      

  5.   

    这样做有点违背我做MSI的初衷了
      

  6.   

    :(事实上ms 做的很好,一定程序上避免了非专业电脑人士在操作计算机时意外删除的这些情况的发生,这点其实不能算不好如果你实在要避开,你可以考虑把某些文件打进资源包啊或者直接二进制方式打进dll,需要的时候还原成文件,好多国外的绿色软件都这样我就更过分了,通常都不使用资源文件,用的是byte[] tmpFile = new byte[]{12,23,... } //直接将二进制放进程序体,由于.net ide 的了#region 可以将它们隐藏真方便啊,过去长长的代码眼花的日子不再罗~~
      

  7.   

    让我把文件放到DLL的代价太大了~~~~~~就像QQ或FOXMAIL,每个帐号都有一个文件夹,我打到安装包里的初始化文件就相当于一个测试帐户,不同的是我没用数据库,而是一个个文件,需要动态删除、增加
      

  8.   

    我不明白,你可以在程序安装后再create 所需要的文件比如qq\dat你完全可以在程序里来个file.exist 如果没有就创建它,这也是程序自己应该做到的,如果用户有意将它删了你还不再建了不成?反正都要程序检测+建立 那就在程序体里加个子程序来处理呀。某些文件要动态增删的可以打包到一个dll 里,在该dll 建个子程序来返回该file 的内容,再写成文件啊通常,大工程可能会有些文件是暂时不用的,比如word 的模板之类的,程序就可能随机进行增删,而又不允许msi 对它进行完整检测,那就会设置一个lib 目录,将这些非常用包放进去,在要时copy create到运行目录。事实上如果你要用msi 做安装+用它建 .lnk 文件+不肯自己建文件 那就只能换种install软件了不过,我相信在msi 上应该有完整性修复的明确范围限定,但我不知道,不知有没有msi 的sdk...
      

  9.   

    补充:通常,大工程可能会有些文件是暂时不用的,比如word 的模板之类的,程序就可能随机进行增删,而又不允许msi 对它进行完整检测,那就会设置一个lib 目录,将这些非常用包放进去,在要时copy create到运行目录,在删除时只要删除了这个新create 的就ok 了,这样也不至于会丢失某些不常用但可能又会用到的东东。这样的目录最常见的就是Library,还有些程序将Common Files 当做library希望对你有所帮助