最近寫個小程序,打包覆蓋安裝更新時老是不起作用,還是原來的程序。
在網上四處查找,productcode和ersion都已經更改,removepreviousversions也設置成true了,可就是不能更新。
最后對比了下程序,發現每次覆蓋安裝后安裝路徑下別的文件的最后修改時間都更新了,就是主輸出文件.exe的修改時間一直沒有改變過,又看了下控制面板,程序的版本確實一直在更新,那么問題就出來了,程序不更新的原因就在於主輸出文件一直沒有更新。
可是每次更新安裝包的時候都重新生成過,在項目文件中主輸出文件也是一直在更新的。在網上幾經周折,終於找到了原因所在。
在項目中的Properties文件夾下有個AssemblyInfo.cs文件,打開,拉到最后,有這么幾行代碼:
- // 程序集的版本信息由下面四個值組成:
- //
- // 主版本
- // 次版本
- // 內部版本號
- // 修訂號
- //
- // 可以指定所有這些值,也可以使用“內部版本號”和“修訂號”的默認值,
- // 方法是按如下所示使用“*”:
- // [assembly: AssemblyVersion("1.0.*")]
- [assembly: AssemblyVersion("1.0.0.0")]
- [assembly: AssemblyFileVersion("1.0.0.0")]
最后兩行就是導致主輸出文件一直不更新的罪魁禍首。
雖然每次生成,項目內容都更改了,但是生成的主輸出文件的版本一直沒有改變,這就導致了每次覆蓋安裝主輸出文件都不會被修改,因為他們的版本是一致的。
so,每次更新前,先修改主輸出文件的版本號,然后再生成項目輸出,然后修改安裝程序版本號、productcode,再復制productcode到卸載程序快捷方式,最后重新生成安裝程序。這樣就可以覆蓋安裝了,安裝后的程序也可以正常更新了。^_^
打包過程: