3 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
要回答第一個(gè)問題,您在技術(shù)上可以將文件放在任何位置,但是您必須自己編寫代碼,因?yàn)槲募哪J(rèn)位置是您的兩個(gè)示例中的第一個(gè)。(鏈接到自己如何做)
至于第二個(gè)問題,它取決于您部署應(yīng)用程序的方式。如果通過.msi進(jìn)行部署,則安裝項(xiàng)目的屬性中有兩個(gè)哈希值(構(gòu)建msi),“升級(jí)代碼”和“產(chǎn)品代碼”。這些決定了msi的安裝方式,以及它是否可以升級(jí),覆蓋或安裝在同一應(yīng)用程序的任何其他版本旁邊。
例如,如果您有兩個(gè)版本的軟件并且它們具有不同的“升級(jí)”代碼,那么對(duì)于Windows而言,無(wú)論名稱是什么,它們都是完全不同的軟件。但是,如果“升級(jí)”代碼相同,但“產(chǎn)品”代碼不同,那么當(dāng)您嘗試安裝第二個(gè)msi時(shí),它會(huì)詢問您是否要升級(jí),此時(shí)它應(yīng)該復(fù)制來(lái)自舊配置到新配置。如果兩個(gè)值相同,并且版本號(hào)沒有更改,則新配置將與舊配置位于同一位置,并且它不必執(zhí)行任何操作。 MSDN文檔
ClickOnce有點(diǎn)不同,因?yàn)樗嗟鼗贑lickOnce版本#和URL路徑,但我發(fā)現(xiàn)只要您繼續(xù)“發(fā)布”到同一位置,新版本的應(yīng)用程序?qū)⒗^續(xù)使用現(xiàn)有配置。(鏈接到ClickOnce如何處理更新)
我也知道有一種方法可以在使用自定義安裝腳本安裝msi時(shí)手動(dòng)合并配置,但我不記得執(zhí)行它的確切步驟...(請(qǐng)參閱此鏈接以了解如何使用Web進(jìn)行操作。配置)

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
我想添加這個(gè)引用的文本作為我將來(lái)遇到此問題時(shí)的參考。據(jù)說,您可以通過調(diào)用Upgrade來(lái)指示ApplicationSettings基礎(chǔ)結(jié)構(gòu)復(fù)制先前版本的設(shè)置:
Properties.Settings.Value.Upgrade();
從客戶端設(shè)置常見問題的博客帖子:(存檔)
問:為什么user.config路徑中有版本號(hào)?如果我部署新版本的應(yīng)用程序,用戶是否會(huì)丟失以前版本保存的所有設(shè)置?
答:user.config路徑對(duì)版本敏感的原因有很多。
(1)支持并行部署不同版本的應(yīng)用程序(例如,您可以使用Clickonce執(zhí)行此操作)。不同版本的應(yīng)用程序可以保存不同的設(shè)置。
(2)升級(jí)應(yīng)用程序時(shí),設(shè)置類可能已被更改,可能與保存的內(nèi)容不兼容,這可能會(huì)導(dǎo)致問題。
但是,我們可以輕松地將設(shè)置從先前版本的應(yīng)用程序升級(jí)到最新版本。只需調(diào)用ApplicationSettingsBase.Upgrade(),它將從先前版本中檢索與該類當(dāng)前版本匹配的設(shè)置,并將它們存儲(chǔ)在當(dāng)前版本的user.config文件中。您還可以選擇在設(shè)置類或提供程序?qū)崿F(xiàn)中覆蓋此行為。
問:好的,但我如何知道何時(shí)致電升級(jí)?
A:好問題。在Clickonce中,當(dāng)您安裝新版本的應(yīng)用程序時(shí),ApplicationSettingsBase將檢測(cè)它并在加載點(diǎn)設(shè)置時(shí)自動(dòng)升級(jí)設(shè)置。在非Clickonce案例中,沒有自動(dòng)升級(jí) - 您必須自己調(diào)用升級(jí)。這是確定何時(shí)調(diào)用升級(jí)的一個(gè)想法:
有一個(gè)名為CallUpgrade的布爾設(shè)置,并給它一個(gè)默認(rèn)值true。當(dāng)您的應(yīng)用啟動(dòng)時(shí),您可以執(zhí)行以下操作:
if (Properties.Settings.Value.CallUpgrade){ Properties.Settings.Value.Upgrade(); Properties.Settings.Value.CallUpgrade = false; }
這將確保僅在部署新版本后第一次運(yùn)行應(yīng)用程序時(shí)調(diào)用Upgrade()。
我不相信它可以真正起作用的一秒鐘 - 微軟不可能提供這種能力,但方法也是如此。
- 3 回答
- 0 關(guān)注
- 420 瀏覽
添加回答
舉報(bào)