Saya mencoba menyesuaikan lokasi user.config
file. Saat ini disimpan dengan hash dan nomor versi
%AppData%\[CompanyName]\[ExeName]_Url_[some_hash]\[Version]\
Saya ingin menjadi agnostik dengan versi aplikasi
%AppData%\[CompanyName]\[ProductName]\
Bisakah ini dilakukan dan bagaimana? Apa implikasinya? Akankah pengguna kehilangan pengaturan mereka dari versi sebelumnya setelah meningkatkan?
%AppData%\[CompanyName]/[ProductName]
tempat yang dapat kita percayai akan tetap ada.Jawaban:
Untuk menjawab pertanyaan pertama, Anda secara teknis dapat meletakkan file di mana pun Anda inginkan, namun Anda harus mengkodekannya sendiri, karena tempat default file tersebut adalah yang pertama dari dua contoh Anda. ( tautan ke cara melakukannya sendiri )
Adapun pertanyaan kedua, itu tergantung pada bagaimana Anda menyebarkan aplikasi. Jika Anda menerapkan melalui .msi, maka ada dua hash di properti proyek penyiapan (tempat msi dibuat), 'kode pemutakhiran' dan 'kode produk'. Ini menentukan bagaimana msi dapat diinstal, dan jika ia meningkatkan, menimpa, atau menginstal di samping versi lain dari aplikasi yang sama.
Misalnya, jika Anda memiliki dua versi perangkat lunak Anda dan mereka memiliki kode 'peningkatan' yang berbeda, maka untuk windows mereka adalah bagian perangkat lunak yang sama sekali berbeda terlepas dari apa namanya. Namun jika kode 'peningkatan' sama, tetapi kode 'produk' berbeda maka ketika Anda mencoba menginstal msi ke-2 itu akan menanyakan Anda apakah Anda ingin meningkatkan, pada saat mana seharusnya menyalin nilai dari konfigurasi lama ke konfigurasi baru. Jika kedua nilai sama, dan nomor versi tidak berubah maka konfigurasi baru akan berada di lokasi yang sama dengan konfigurasi lama, dan tidak perlu melakukan apa pun. Dokumentasi MSDN
ClickOnce sedikit berbeda, karena lebih berbasis versi ClickOnce # dan jalur URL, namun saya telah menemukan bahwa selama Anda terus 'Publikasikan' ke lokasi yang sama, versi baru aplikasi akan terus menggunakan konfigurasi yang ada. ( tautan ke bagaimana ClickOnce menangani pembaruan )
Saya juga tahu ada cara untuk menggabungkan konfigurasi secara manual selama penginstalan msi menggunakan skrip penginstalan kustom, tetapi saya tidak ingat langkah-langkah yang tepat untuk melakukannya ... (lihat tautan ini untuk mengetahui cara melakukannya dengan web. config)
sumber
Saya ingin menambahkan teks kutipan ini sebagai referensi ketika saya memiliki masalah ini di masa mendatang. Seharusnya Anda dapat menginstruksikan infrastruktur ApplicationSettings untuk menyalin pengaturan dari versi sebelumnya dengan memanggil Upgrade :
Dari posting blog FAQ Pengaturan Klien : ( arsip )
Saya tidak percaya sedetik pun bahwa itu benar-benar bisa berfungsi - tidak mungkin Microsoft menyediakan kemampuan ini, tetapi metodenya ada di sana.
sumber
if(CallUpgrade) { Upgrade(); }
pernyataan sederhana .Properties.Settings.Value
Saya memilikiProperties.Settings
bagian tetapi apakah saya melewatkan sesuatu atau apakah itu khusus untuk Anda?Upgrade
tidak berfungsi.Properties.Settings.Default.Upgrade()
Properties.Settings.Default.Save();
setelah mengubahnya menjadi false :-)File user.config disimpan di
c:\Documents and Settings>\<username>\[Local Settings\]Application Data\<companyname>\<appdomainname>_<eid>_<hash>\<verison>
<c:\Documents and Settings>
adalah direktori data pengguna, baik non-roaming (Pengaturan Lokal di atas) atau roaming.<username>
adalah nama pengguna.<companyname>
adalah nilai CompanyNameAttribute, jika tersedia. Jika tidak, abaikan elemen ini.<appdomainname>
adalah AppDomain.CurrentDomain.FriendlyName. Ini biasanya default ke nama .exe.<eid>
adalah URL, StrongName, atau Path, berdasarkan bukti yang tersedia untuk hash.<hash>
adalah bukti hash SHA1 yang dikumpulkan dari CurrentDomain, dengan urutan preferensi berikut:1. StrongName
2. URL:
Jika tidak satu pun tersedia, gunakan jalur .exe.
<version>
adalah pengaturan AssemblyInfo AssemblyVersionAttribute.Penjelasan lengkap ada di sini http://msdn.microsoft.com/en-us/library/ms379611.aspx
sumber
(Saya akan menambahkan ini sebagai komentar pada jawaban @Amr, tetapi saya belum memiliki cukup perwakilan untuk melakukannya.)
The info di artikel MSDN sangat jelas dan tampaknya masih berlaku. Namun gagal menyebutkan bahwa hash SHA1 dituliskan basis 32 dikodekan, bukan basis 16 yang lebih khas.
Saya yakin algoritme yang digunakan diimplementasikan
ToBase32StringSuitableForDirName
, yang dapat ditemukan di sini di Sumber Referensi Microsoft .sumber