ক্লিকঅনস অ্যাপ্লিকেশনটির জন্য ফোল্ডার পাথ কীভাবে পাবেন


160

আমাকে একই ফোল্ডারে একটি ফাইল লিখতে হবে যেখানে কনসোল ক্লিকঅনস .application(এক্সিকিউটেবল ফাইল) থাকে। যে ফোল্ডারটি এটি থেকে আরম্ভ হবে।

আমি চেষ্টা করেছি Application.StartupPath& Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) কিন্তু পথটি নীচে একটি সাবফোল্ডারের দিকে নির্দেশ করছে c:\Documents & Settings। যেখানে .applicationবাস করি সেখানে আমি কীভাবে পাব ?

উত্তর:


253

ফোল্ডারের অবস্থানটি সন্ধান করতে আপনি কেবল অ্যাপটি চালাতে পারবেন, টাস্ক ম্যানেজারটি খুলতে পারবেন (CTRL-SHIFT-ESC), অ্যাপ্লিকেশনটি নির্বাচন করুন এবং ফাইলের অবস্থান খুলুন ডান ক্লিক করুন।


3
আরে, প্রো টিপ! তবে এটি পুরানো ক্রেপি এক্সপি মেশিনে উপলভ্য নয়। :)
জালাল

5
"পুরানো ক্র্যাপি মেশিনগুলির" জন্য জালাল www.SysInternals.com যান এবং প্রক্রিয়া এক্সপ্লোরার ডাউনলোড করুন। আমি Win7 এর টাস্ক ম্যানেজারের পরিবর্তনগুলি সন্দেহ করি এবং তারপরে উইন 8 কেবল এটি থেকে অনুলিপি করা হয়েছিল।
এরিওচ 'দ্য

1
গ্রাহকের কম্পিউটারে চলমান আপনার অ্যাপ্লিকেশনটিতে আপনি এটি কীভাবে অর্জন করতে পারেন?
ব্যবহারকারী 3285954

2
আমি যদি অ্যাপ্লিকেশনটি চালাতে না পারি কারণ এটির আমার প্রয়োজন হওয়া কোনও লগ ফাইল মুছে ফেলবে?
টোমা জ্যাটো - মনিকা

2
@ টনি_হেনরিচের আপনার সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত
স্পার্কি শর্টস

120

পাথ সি: এর অধীন একটি সাবফোল্ডারটির দিকে ইঙ্গিত করছে: u নথি এবং সেটিংস

সেটা ঠিক. ClickOnce applicationsএগুলি ইনস্টল করা ব্যবহারকারীর প্রোফাইলে ইনস্টল করা হয়। এক্সিকিউটিভ এসেম্বলি থেকে তথ্য পুনরুদ্ধার করার পথে আপনি কি সেই পথটি নিয়েছিলেন এবং তা পরীক্ষা করে দেখেছেন?

উইন্ডোজ ভিস্তা এবং উইন্ডোজ On এ আপনি এখানে ক্লিকঅনস ক্যাশে পাবেন:

c:\users\username\AppData\Local\Apps\2.0\obfuscatedfoldername\obfuscatedfoldername

উইন্ডোজ এক্সপিতে আপনি এটি এখানে পাবেন:

C:\Documents and Settings\username\LocalSettings\Apps\2.0\obfuscatedfoldername\obfuscatedfoldername

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

25

অ্যাপ্লিকেশনডেপমেন্ট.কারেনডেপমেন্ট.একটিভেশন ইউরি কাজ করতে পারে

"শূন্য-দৈর্ঘ্যের স্ট্রিং যদি ডিপোরিয়াল ম্যানিফেস্টে ট্রাস্ট ইউরালপ্যারামিটারের সম্পত্তিটি মিথ্যা হয় বা ব্যবহারকারী যদি কোনও ইউএনসি সরবরাহ স্থাপনের জন্য সরবরাহ করে থাকে বা স্থানীয়ভাবে এটি খোলায় Otherwise কোনও পরামিতি সহ। "


তবে আপনি যা সত্যিই চান তা হ'ল অ্যাপ্লিকেশনডেপলজমেন্ট C কর্নার ডাইপেকশন.ডাটা ডিরেক্টরী যা আপনাকে এমন ফোল্ডার দেয় যা আপনি ডেটা লিখতে পারেন। আপনি যখনই অ্যাপ্লিকেশনটি আপডেট করেন আপনি মূল .exe ফোল্ডারে যা হারাবেন তা হারাতে পারবেন তবে আপনি অ্যাপ্লিকেশনটির নতুন সংস্করণে ডেটা ডিরেক্টরিটি স্থানান্তর করতে পারেন। আপনার অ্যাপ্লিকেশনটি এই ফোল্ডারে যে কোনও লগ ফাইল রয়েছে তার সাথে লিখতে পারে - এবং আমি নিশ্চিত যে এর লিখনযোগ্য হওয়ার গ্যারান্টিযুক্ত।


আমি কিছুই করিনি, তবে পুরানো ডেটা ডিরেক্টরী থেকে ফাইলগুলি স্বয়ংক্রিয়ভাবে মোতায়েনের পরে নতুন ডেটা ডিরেক্টরীতে অনুলিপি করা হয়। কোন .pre ডিরেক্টরি আছে। (.NET ফ্রেমওয়ার্ক 3.5 এবং 4.5)
ডের_মিস্টার

15

আমি .NET 4.5.1 এ Assembly.GetExecutingAssembly().Locationএকটি ClickOnceমোতায়েন অ্যাপ্লিকেশনটির পথ পেতে ব্যবহার করছি ।

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

কোনও অ্যাপ্লিকেশনকে অবশ্যই সর্বদা এমন উদ্দেশ্যে রক্ষিত ফোল্ডারে লিখতে হবে। আপনার এনভায়রনমেন্ট থেকে শুরু হওয়া ফোল্ডারগুলি পেতে পারেন pস্পেশিয়াল ফোল্ডার গণনা। : দুটিই MSDN পৃষ্ঠা প্রতিটি ফোল্ডারের জন্য ব্যাখ্যা http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

অর্থাত্ ডেটা, লগ এবং অন্যান্য ফাইলগুলির জন্য যে কেউ ApplicationData(রোমিং), LocalApplicationData(স্থানীয়) বা ব্যবহার করতে পারে CommonApplicationData। অস্থায়ী ফাইলগুলির জন্য Path.GetTempPathবা ব্যবহার করুন Path.GetTempFileName

সার্ভার এবং ডেস্কটপগুলিতেও উপরোক্ত কাজ।

সম্পাদনা: Assembly.GetExecutingAssembly()প্রধান নির্বাহযোগ্য বলা হয়।


এটি আমার জন্য ক্লিকঅনস অ্যাপ্লিকেশনের জন্য কাজ করছে, পাশাপাশি একই অ্যাপটি ডিবাগ করার সময় ভিএস ডেভ পরিবেশেও কাজ করছে।
বিকাশকারী

3

ClickOnce অ্যাপ্লিকেশন DO C- এর একটি সাব বসবাস: \ ডকুমেন্টস & সেটিংস। তাদের কাছে "পরিষ্কার" ইনস্টলেশন ডিরেক্টরি নেই কারণ স্থানীয় পিসিতে অ্যাপ্লিকেশনটি চালুর অনুমতি দেওয়ার জন্য স্থানীয় ফাইলগুলি মূলত "অস্থায়ীভাবে" ডাউনলোড করা হয় এবং অ্যাপ্লিকেশনটির সম্পাদনা ক্লিকওন্স সার্ভার থেকে নিয়ন্ত্রণ করা হয় যেগুলি প্রকাশের সেটিংসের উপর নির্ভর করে স্থাপন করা হয়েছে (আপডেট, সংস্করণ প্রয়োজনীয়তা ইত্যাদি পরীক্ষা করা হচ্ছে)।


আমার সিটিতে অ্যাক্সেস নেই: server সার্ভারে ডকুমেন্টস এবং সেটিংস ফোল্ডার যার অর্থ অ্যাপটি তৈরি করা ফাইলটিতে আমার অ্যাক্সেস নেই। আমি একটি নির্দিষ্ট ফোল্ডার থেকে অ্যাপটি চালাচ্ছি। এটি অ্যাপ্লিকেশনটি প্রকাশিত ফোল্ডার। আমি কীভাবে সেই ফোল্ডারের পথ পাব?
টনি_হেনরিচ

ওহ, আপনি ব্যবহারের URL চান। দুঃখিত, আমি এটি মোটেও পাইনি। আপনি কি এটি ক্লিকঅনস অ্যাপ্লিকেশনটির ভিতরে থেকে, বা কোনও বাহ্যিক অ্যাপ্লিকেশন থেকে পাওয়ার চেষ্টা করছেন?
রবিনডটনেট

1

আমার ক্লিকঅনস অ্যাপ্লিকেশনটির ডিফল্ট ফোল্ডার লোকেশন পেতে সক্ষম হয়ে কাজ করার জন্য আমি এখানে যা খুঁজে পেয়েছি এবং আমার অনুরূপ, নির্দিষ্ট দৃশ্যের জন্য এটি আমার সন্ধানগুলিতে আমি কোথাও দেখেছি তা উল্লেখ করা হয়নি:

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

এখানে আমার ব্যবহারের ক্ষেত্রে একটি দৃশ্য রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

  • নীল বক্সযুক্ত ফোল্ডারগুলি প্রতিটি পরিবেশের প্রয়োগের জন্য আমার ডিরেক্টরি অবস্থান।
  • লাল বাক্সযুক্ত ফোল্ডারটি সেই ডিরেক্টরি যা আমি পাথ পেতে চাই (যা প্রথমে অ্যাপ্লিকেশনটির মোতায়েন করা ফোল্ডার অবস্থান "মাই ক্লিকঅনসগ্রিটঅ্যাপ__1_0_0_37" পাওয়া যা ওপি-র মতোই হয়)।

ক্লিকোনস অ্যাপ্লিকেশনটি নিযুক্ত করা ফোল্ডারটি ফিরিয়ে আনতে এই প্রশ্নে বা তাদের মন্তব্যে আমি কোনও পরামর্শ খুঁজে পাইনি (যে আমি আগ্রহের ফোল্ডারটি সন্ধান করতে এই ফোল্ডারের সাথে সম্পর্কিত হয়ে যেতে পারি)। অন্য কোনও ইন্টারনেট অনুসন্ধান বা সম্পর্কিত এসও প্রশ্নের কোনও উত্তর নেই turned

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

সমাধানটি দেখুন:

  • AppDomain.CurrentDomain.BaseDirectory অ্যাপ্লিকেশনটি যখন আমি বিকাশ করি তখন ভিজ্যুয়াল স্টুডিওতে চালিত হয়
  • System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation যখন এটি সাধারণত চালানো হয়।

System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocationআমার ক্লিকঅনস অ্যাপ্লিকেশনটি যে কোনও ক্ষেত্রে নিযুক্ত করা হয়েছে সেই নেটওয়ার্ক ডিরেক্টরিটি সঠিকভাবে প্রদান করে। এটি যখন এর মাধ্যমে চালু হয়:

  • setup.exe
  • MyClickOnceGreatApp.application
  • ডেস্কটপ শর্টকাট অ্যাপ্লিকেশনটির প্রথম ইনস্টল এবং লঞ্চের উপরে তৈরি।

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

string directoryOfInterest = "";
if (System.Diagnostics.Debugger.IsAttached)
{
    directoryOfInterest = Directory.GetParent(Directory.GetParent(Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).FullName).FullName).FullName;
}
else
{
    try
    {
        string path = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString();
        path = path.Replace("file:", "");
        path = path.Replace("/", "\\");
        directoryOfInterest = Directory.GetParent(Directory.GetParent(path).FullName).FullName;
    }
    catch (Exception ex)
    {
        directoryOfInterest = "Error getting update directory needed for relative base for finding WorkAccounts directory.\n" + ex.Message + "\n\nUpdate location directory is: " + System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString();
    }
}

0

অনুমান করা হচ্ছে যে প্রশ্নটি অ্যাপ্লিকেশন ফোল্ডারে ফাইলঅ্যাক্সেস সম্পর্কে ক্লিক ওন্সের পরে (সত্য == সিস্টেম.ডাইপলমেন্ট. অ্যাপ্লিকেশনডেপ্লোয়.আইএসনেট ওয়ার্কডেপর্ডার) অ্যাপ্লিকেশনটি ব্যবহারকারীর পিসিতে ইনস্টল করা আছে, অ্যাপ্লিকেশন দ্বারা এই ফোল্ডারটি পাওয়ার জন্য তাদের তিনটি উপায়:

String path1 = System.AppDomain.CurrentDomain.BaseDirectory;
String path2 = System.IO.Directory.GetCurrentDirectory();    
String path3 = System.Reflection.Assembly.GetExecutingAssembly().CodeBase; //Remove the last path component, the executing assembly itself.

এইগুলি ভিএস আইডিই থেকে এবং একটি মোতায়েন / ইনস্টল করা ক্লিকডঅনস অ্যাপ্লিকেশন থেকে, কোনও "ট্রু == সিস্টেম.ডেপমেন্ট.অ্যাপ্লিকেশনডেপ্লয়.আইএস নেটওয়ার্কডেপরেড" চেক প্রয়োজন। ক্লিকঅনস ভিজ্যুয়াল স্টুডিও 2017 প্রকল্পের অন্তর্ভুক্ত যে কোনও ফাইল তুলে নেয় যাতে অ্যাপ্লিকেশনটি অ্যাপ্লিকেশনটির মধ্যে থেকে আপেক্ষিক পাথ ব্যবহার করে যে কোনও এবং সমস্ত মোতায়েন করা ফাইলগুলিতে অ্যাক্সেস করতে পারে।

এটি উইন্ডোজ 10 এবং ভিজ্যুয়াল স্টুডিও 2017 এর উপর ভিত্তি করে

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