অ্যাপ্লিকেশন আপগ্রেডে সেটিংস হারাতে এড়াতে আমি। নেট ব্যবহারকারী সেটিংসের অবস্থান নিয়ন্ত্রণ করতে পারি?


104

আমি user.configফাইলের অবস্থানটি কাস্টমাইজ করার চেষ্টা করছি । বর্তমানে এটি একটি হ্যাশ এবং সংস্করণ নম্বর দিয়ে সঞ্চিত

%AppData%\[CompanyName]\[ExeName]_Url_[some_hash]\[Version]\

আমি এটিকে অ্যাপ্লিকেশনটির সংস্করণে অজ্ঞাব্য হতে চাই

%AppData%\[CompanyName]\[ProductName]\

এটি করা যায় এবং কীভাবে? এর অর্থ কী? ব্যবহারকারী আপগ্রেড করার পরে পূর্ববর্তী সংস্করণ থেকে তাদের সেটিংস হারাবে?


উজবোনসের উত্তর ফাইলের ক্ষেত্রে তথ্য সম্পর্কিত হলেও আমি বিশ্বাস করি যে আপগ্রেড করার ক্ষেত্রে ইয়ান আরও সঠিক।
অ্যান্টনি মাষ্ট্রেয়ান

4
@ অ্যান্থনিমাস্ট্রিয়ান আমি ব্যক্তিগতভাবে মনে করি যে কোনও গুরুত্বপূর্ণ সেটিংস আমার মাইক্রোসফ্ট সরবরাহিত অ্যাপ্লিকেশনসটিংয়ের অবকাঠামোর উপর নির্ভর করবে না । ম্যাক্সার ঠিক সেটিংগুলি সংরক্ষণ করা উচিত %AppData%\[CompanyName]/[ProductName]যেখানে আমরা বিশ্বাস করতে পারি এটি যেখানে থাকবে।
ইয়ান বয়ড

2
সন্দেহ নেই, অন্তর্নির্মিত অ্যাপ্লিকেশন এবং ব্যবহারকারীর সেটিংসের সাথে আমার অবিচ্ছিন্ন অভিজ্ঞতা ভয়ানক। আমি অ্যাপডাটা বা প্রোগ্রামডাটাতে জেসন ফাইলগুলি প্রস্তাব করি।
অ্যান্টনি মাস্ট্রিয়ান

আপনি কোনও রেজিস্ট্রিতে আপনার সেটিংসও সঞ্চয় করতে পারেন। বিকল্প সেটিংস শ্রেণীর প্রয়োগের জন্য stackoverflow.com/a/12127888/1273550 দেখুন ।
রবি প্যাটেল

উত্তর:


39

প্রথম প্রশ্নের উত্তর দেওয়ার জন্য, আপনি প্রযুক্তিগতভাবে যেখানেই চান ফাইলটি রাখতে পারেন তবে ফাইলটি যে ডিফল্ট জায়গায় যায় সেখানে এটি আপনার দুটি উদাহরণের প্রথমটি yourself ( কীভাবে এটি নিজে করবেন তার লিঙ্ক )

দ্বিতীয় প্রশ্নের হিসাবে এটি নির্ভর করে আপনি কীভাবে অ্যাপ্লিকেশন স্থাপন করবেন। যদি আপনি একটি .msi- র মাধ্যমে স্থাপন করেন তবে সেটআপ প্রকল্পের বৈশিষ্ট্যগুলিতে (এমএসআই তৈরি করা হয়েছে), 'আপগ্রেড কোড' এবং 'পণ্য কোড' এর মধ্যে দুটি হ্যাশ রয়েছে। এটি নির্ধারণ করে যে কীভাবে এমএসআই ইনস্টল করা যায় এবং যদি এটি একই অ্যাপ্লিকেশনটির অন্য কোনও সংস্করণের পাশে আপগ্রেড, ওভাররাইট, বা ইনস্টল হয়।

উদাহরণস্বরূপ, আপনার কাছে যদি আপনার সফ্টওয়্যারটির দুটি সংস্করণ থাকে এবং সেগুলির আলাদা আলাদা 'আপগ্রেড' কোড থাকে, তবে উইন্ডোজগুলিতে নামটি কী তা নির্বিশেষে এগুলি সম্পূর্ণ আলাদা আলাদা সফ্টওয়্যার pieces তবে 'আপগ্রেড' কোডটি যদি একই হয় তবে 'প্রোডাক্ট' কোডটি আলাদা হয় তবে আপনি যখন ২ য় এমএসআই ইনস্টল করার চেষ্টা করবেন তখন আপনাকে জিজ্ঞাসা করা হবে আপনি আপগ্রেড করতে চান কিনা, সেই সময়টি থেকে মানগুলি অনুলিপি করার কথা আছে পুরানো কনফিগারেশন একটি নতুন কনফিগারেশন। যদি উভয় মান একই হয়, এবং সংস্করণ নম্বরটি পরিবর্তন না হয় তবে নতুন কনফিগারেশনটি পুরানো কনফিগারেশনের মতো একই স্থানে থাকবে এবং এটি কিছুই করতে হবে না। এমএসডিএন ডকুমেন্টেশন

ক্লিকঅনসটি কিছুটা আলাদা, কারণ এটি ক্লিকউইন সংস্করণ # এবং ইউআরএল পাথের চেয়ে বেশি ভিত্তি করে নির্মিত হয়েছে, তবে আমি দেখতে পেয়েছি যে আপনি যতক্ষণ একই জায়গায় 'প্রকাশ' চালিয়ে যাবেন ততক্ষণ অ্যাপ্লিকেশনটির নতুন সংস্করণ ব্যবহার করা অবিরত থাকবে বিদ্যমান কনফিগারেশন ( ক্লিকঅনস কীভাবে আপডেটগুলি পরিচালনা করে তার লিঙ্ক )

আমি আরও জানি যে কাস্টম ইনস্টল স্ক্রিপ্টগুলি ব্যবহার করে এমএসআই ইনস্টল করার সময় ম্যানুয়ালি কনফিগারেশনগুলিতে একত্রীকরণের উপায় রয়েছে তবে এটি করার সঠিক পদক্ষেপগুলি আমার মনে নেই ... ( এটি ওয়েবের মাধ্যমে কীভাবে করা যায় তার জন্য এই লিঙ্কটি দেখুন । কনফিগ)


আপগ্রেড কোডটি কি স্থির থাকার কথা নয় এবং পণ্য কোডটি যা রিলিজের মধ্যে পরিবর্তিত হওয়ার কথা? ব্লগস.এমএসএন
পসু /

ডোহ! আপনি সঠিক, বিশ্বাস করতে পারবেন না যে আমি এটি পেছনের দিকে পেয়েছি (এবং এটি ধরতে 2 বছর সময় লেগেছিল)। এটি আমার অতীতের এক পর্যায়ে কিছুক্ষণের জন্য
রোবু

এর অর্থ কি, কেবল ইনস্টল করা ব্যবহারকারী তার সেটিংস আপগ্রেড করে?
মিখা উইডেনম্যান

79

ভবিষ্যতে যখন আমার এই সমস্যা হয় তখন আমি এই উদ্ধৃত পাঠ্যটিকে একটি রেফারেন্স হিসাবে যুক্ত করতে চেয়েছিলাম। সম্ভবত আপনি আপগ্রেড কল করে পূর্ববর্তী সংস্করণ থেকে সেটিংস অনুলিপি করতে অ্যাপ্লিকেশনসটিংয়ের অবকাঠামোকে নির্দেশ দিতে পারেন :

Properties.Settings.Value.Upgrade();

থেকে ক্লায়েন্ট সেটিং প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী ব্লগ পোস্টে: ( সংরক্ষণাগার )

প্রশ্ন: ইউজার.কমফাইগ পাথটিতে কেন একটি সংস্করণ নম্বর রয়েছে? আমি যদি আমার অ্যাপ্লিকেশনটির নতুন সংস্করণ স্থাপন করি তবে ব্যবহারকারী কি পূর্ববর্তী সংস্করণে সংরক্ষিত সমস্ত সেটিংস হারাবেন না?

উত্তর: ইউজার.কমফিগ পাথ সংস্করণ সংবেদনশীল হওয়ার কয়েকটি কারণ রয়েছে।

(1) কোনও অ্যাপ্লিকেশনের বিভিন্ন সংস্করণের পাশাপাশি পাশাপাশি স্থাপনাকে সমর্থন করার জন্য (উদাহরণস্বরূপ আপনি ক্লিকোনস দিয়ে এটি করতে পারেন)। অ্যাপ্লিকেশনটির বিভিন্ন সংস্করণের পক্ষে বিভিন্ন সেটিংস সংরক্ষণ করা সম্ভব।

(২) আপনি যখন কোনও অ্যাপ্লিকেশন আপগ্রেড করবেন, সেটিংস শ্রেণিটি পরিবর্তিত হয়ে থাকতে পারে এবং যা সংরক্ষণ করা হয়েছে তার সাথে সামঞ্জস্য নাও করতে পারে, যা সমস্যার সৃষ্টি করতে পারে।

তবে আমরা অ্যাপ্লিকেশনটির পূর্ববর্তী সংস্করণ থেকে সর্বশেষে সেটিংস আপগ্রেড করা সহজ করে দিয়েছি। কেবল অ্যাপ্লিকেশনসেটিংসবেস.অপগ্রেড () কল করুন এবং এটি পূর্ববর্তী সংস্করণ থেকে সেটিংস পুনরুদ্ধার করবে যা শ্রেণীর বর্তমান সংস্করণটির সাথে মেলে এবং সেগুলি বর্তমান সংস্করণটির ব্যবহারকারীকনফাইগ ফাইলে সংরক্ষণ করবে। আপনার সেটিংস শ্রেণিতে বা আপনার সরবরাহকারীর বাস্তবায়নে এই আচরণকে ওভাররাইড করার বিকল্পও রয়েছে।

প্রশ্ন: ঠিক আছে, তবে আমি কীভাবে জানব কখন আপগ্রেড কল করতে হবে?

উত্তর: ভাল প্রশ্ন। ক্লিকোনসে, আপনি যখন আপনার অ্যাপ্লিকেশনটির একটি নতুন সংস্করণ ইনস্টল করবেন, অ্যাপ্লিকেশনসেটিংসবেস এটি সনাক্ত করবে এবং পয়েন্ট সেটিংসে স্বয়ংক্রিয়ভাবে আপনার জন্য সেটিংস আপগ্রেড হবে। অ-ক্লিকনস ক্ষেত্রে, কোনও স্বয়ংক্রিয় আপগ্রেড নেই - আপনাকে নিজেরাই আপগ্রেড করতে হবে। আপগ্রেড কখন কল করতে হবে তা নির্ধারণের জন্য এখানে একটি ধারণা রয়েছে:

কলআপডগ্রেড নামে একটি বুলিয়ান সেটিংস রাখুন এবং এটিকে সত্যের একটি ডিফল্ট মান দিন। আপনার অ্যাপ্লিকেশনটি শুরু হয়ে গেলে আপনি এর মতো কিছু করতে পারেন:

if (Properties.Settings.Value.CallUpgrade)
{
   Properties.Settings.Value.Upgrade();
   Properties.Settings.Value.CallUpgrade = false;    
}

এটি নিশ্চিত করবে যে নতুন সংস্করণ স্থাপনের পরে অ্যাপ্লিকেশনটি প্রথমবারের মতো আপগ্রেড () বলা হবে।

আমি বিশ্বাস করি না যে এটি আসলে কাজ করতে পারে - এটি কোনও উপায় নেই যে মাইক্রোসফ্ট এই ক্ষমতাটি সরবরাহ করবে, তবে পদ্ধতিটিও সেখানে একই।


3
এই সম্পূর্ণ কাজ! আমি কেবল সাধারণ if(CallUpgrade) { Upgrade(); }বিবৃতি ব্যবহার করেছি ।
অ্যান্টনি মাস্ট্রিয়ান

@ ইয়ান বয়ড: আমি এই ধারণাটি পছন্দ করি এবং আমি একটি সম্ভাব্য সমাধান পাওয়ার বিষয়ে সম্পূর্ণরূপে স্টোকড যাইহোক আমি একটি জিনিস সম্পর্কে বিভ্রান্ত। আমি নেই Properties.Settings.Value আমি আছে Properties.Settingsঅংশ কিন্তু আমি কিছু অনুপস্থিত করছি বা যে আপনাকে নির্দিষ্ট হয়?
পাল্লাডিন

8
এটি ভালভাবে কাজ করে, তবে আমি পাঠকদের মনে করিয়ে দিচ্ছি যে সংস্করণ নম্বর বাদ দিয়ে কনফিগার করার পথটি একই হতে হবে। যেমন @ আমর এর উত্তর দেখুন। উদাহরণস্বরূপ, যদি অ্যাপ্লিকেশনটির নতুন সংস্করণটি পূর্ববর্তী সংস্করণের তুলনায় কোনও ভিন্ন ফাইল পাথ থেকে চালু করা হয়, তবে Upgradeকাজ করে না।
স্টিফেন সোয়েনসেন

1
@ রিফ্রাক্টপালদিন এটিProperties.Settings.Default.Upgrade()
স্টিফেন

5
Properties.Settings.Default.Save();এটি মিথ্যাতে পরিবর্তন করার পরে যুক্ত করতে ভুলবেন না :-)
জেফ

32

User.config ফাইলটি এখানে সংরক্ষিত আছে

c:\Documents and Settings>\<username>\[Local Settings\]Application Data\<companyname>\<appdomainname>_<eid>_<hash>\<verison>

<c:\Documents and Settings>ব্যবহারকারী ডেটা ডিরেক্টরি, না হয় রোমিং (উপরে স্থানীয় সেটিংস) বা রোমিং হয়।
<username>ব্যবহারকারীর নাম
<companyname>যদি পাওয়া যায় তবে কোম্পানির নামঅ্যাট্রিবিউটের মান। অন্যথায়, এই উপাদানটি উপেক্ষা করুন।
<appdomainname>হ'ল অ্যাপডোমাইন.কন্টেনডোমাইন.ফ্রেন্ডলি নাম। এটি সাধারণত .exe নামের সাথে ডিফল্ট হয়।
<eid>হ্যাশ উপলভ্য প্রমাণের ভিত্তিতে ইউআরএল, স্ট্রংনাম বা পাথ।
<hash>নিম্নোক্ত অগ্রাধিকারের
ক্রমানুসারে কারেন্টডোমেন থেকে সংগৃহীত প্রমাণের একটি SHA1 হ্যাশ: 1. স্ট্রংনাম
২. ইউআরএল:
যদি এগুলির কোনওটি উপলব্ধ না হয় তবে .exe পাথটি ব্যবহার করুন।
<version>হ'ল এসেম্বলিআইএনফো-এর এসেম্বলি ভার্সনঅ্যাট্রিবিউট সেটিং।

সম্পূর্ণ বিবরণটি এখানে http://msdn.microsoft.com/en-us/library/ms379611.aspx


4

(আমি এটি @ আমর এর উত্তরে মন্তব্য হিসাবে যুক্ত করব, তবে এখনও তা করার মতো যথেষ্ট প্রতিবেদন আমার কাছে নেই।)

দুটিই MSDN প্রবন্ধে তথ্য খুব স্পষ্ট এবং এখনও আবেদন করতে বলে মনে হচ্ছে। তবে এটি উল্লেখ করতে ব্যর্থ হয় যে SHA1 হ্যাশটি আরও সাধারণ বেস 16 এর চেয়ে 32 বেসড এনকোডযুক্ত লিখিত আছে।

আমি বিশ্বাস করি যে অ্যালগরিদম ব্যবহৃত হচ্ছে এটি প্রয়োগ করা হয়েছে ToBase32StringSuitableForDirNameযা মাইক্রোসফ্ট রেফারেন্স উত্সে এখানে পাওয়া যাবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.