সি # - উইন্ডোজ 64 বিটে প্রোগ্রাম ফাইলগুলি (x86) কীভাবে পাবেন


153

আমি ব্যাবহার করছি:

FileInfo(
    System.Environment.GetFolderPath(
        System.Environment.SpecialFolder.ProgramFiles) 
    + @"\MyInstalledApp"

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

উইন্ডোজ এক্সপি এবং উইন্ডোজ ভিস্তার 32-বিট সংস্করণগুলিতে এটি দুর্দান্ত কাজ করে। তবে, x64 উইন্ডোজ ভিস্তার কোডটি x64 প্রোগ্রাম ফাইল ফোল্ডারটি ফেরত দেয়, যেখানে অ্যাপ্লিকেশনটি প্রোগ্রাম ফাইলগুলি x86 এ ইনস্টল করা থাকে। হার্ড ওয়্যারিং "সি: \ প্রোগ্রাম ফাইলগুলি (x86)" ছাড়াই প্রোগ্রাম ফাইল এক্স x86-এ প্রোগ্রামটি প্রোগ্রামিকভাবে ফেরার কোনও উপায় আছে?


9
এটি লক্ষণীয় যে এটি কেবলমাত্র "64 ফাইল ওএসে 64 বিট অ্যাপ্লিকেশনটিতে" প্রোগ্রাম ফাইলগুলি "দেয়। আপনি যদি আপনার অ্যাপ্লিকেশনটি বিশেষত x86 হিসাবে সংকলন করেন তবে এটি এই কোডটি ব্যবহার করে bit৪ বিট ওএসে "প্রোগ্রাম ফাইল (x86)" ফিরিয়ে আনবে।
VitalyB

উত্তর:


230

নীচের ফাংশনটি Program Filesএই তিনটি উইন্ডোজ কনফিগারেশনের মধ্যে x86 ডিরেক্টরিটি ফিরিয়ে দেবে :

  • 32 বিট উইন্ডোজ
  • 32 বিট প্রোগ্রাম 64 বিট উইন্ডোজ চলমান
  • Bit৪ বিট প্রোগ্রাম on৪ বিট উইন্ডোতে চলছে

 

static string ProgramFilesx86()
{
    if( 8 == IntPtr.Size 
        || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
    {
        return Environment.GetEnvironmentVariable("ProgramFiles(x86)");
    }

    return Environment.GetEnvironmentVariable("ProgramFiles");
}

1
এটি কোনও স্থানীয় পরিবেশে কাজ করে কিনা সে সম্পর্কে কেউ মন্তব্য করতে পারেন? অগ্রিম ধন্যবাদ ...
টম

কেন এই পরীক্ষা: 8 == IntPtr.Size?
ফ্লোরিয়ান


10
শুধু Environment.Is64BitOperatingSystemবা কেন নয় Environment.Is64BitProcess?
osvein

7
@ অ্যানস্টার্ট এর উত্তর দেওয়া হয়েছিল ২০০৮ সালে, NET 4.0 এ এই পদ্ধতিগুলি উপলভ্য হওয়ার আগে।
রোটেম

135

আপনি যদি নেট 4 ব্যবহার করছেন, সেখানে একটি বিশেষ ফোল্ডার গণনা প্রোগ্রামফাইল্স এক্স 86 রয়েছে :

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

2
এটি 32 বিট ওএসে কীভাবে আচরণ করে? এটি x86 ছাড়াই "সি: \ প্রোগ্রাম ফাইলগুলি" ফেরত দেয়?
মার্সেল গোসেলিন

6
হ্যাঁ. এটি x: 86 প্রোগ্রাম ফাইলগুলি x86 এবং সি: \ প্রোগ্রাম ফাইলগুলি (x86) 64৪-বিট উইন্ডোতে ফিরে আসবে।
নাথান

2
এটি নিজেই পরীক্ষা করুন - সার্ভার ২০০৩ 32 বিটে, এটি আমার জন্য খালি স্ট্রিংটি ফিরে আসে: কনসোল.উইরটলাইন ("X86:" + সিস্টেম.Enomot.GetFolderPath (System.En वातावरण.SpecialFolder.ProgramFilesX86));
ডেভিড আইসন

4
উইন্ডোজ এক্সপি (32 বিট)
প্যাট্রিক ম্যাকডোনাল্ড

12
মাইক্রোসফ্টের ডকুমেন্টেশনতে বলা হয়েছে: "একটি x86 সিস্টেমে প্রোগ্রামফাইলসএক্স member৮ সদস্যকে পরিবেশের কাছে পাস করা G গেটফোল্ডারপথ পদ্ধতি স্ট্রিং দেয় EEmpty; পরিবর্তে প্রোগ্রামফিলস সদস্যটি ব্যবহার করুন Windows আপনি পরিবেশ নির্ধারণ করে উইন্ডোজ একটি 32-বিট অপারেটিং সিস্টেম কিনা তা নির্ধারণ করতে পারেন s 64 বিট অপারেটিং সিস্টেম বৈশিষ্ট্য । "
goodies4uall


14

নোট করুন, তবে, ProgramFiles(x86)আপনার অ্যাপ্লিকেশনটি 64-বিট চলমান থাকলেই পরিবেশের চলকটি উপলব্ধ।

যদি আপনার অ্যাপ্লিকেশনটি 32-বিট চলমান থাকে তবে আপনি কেবলমাত্র ProgramFilesপরিবেশের পরিবর্তনশীল ব্যবহার করতে পারেন যার মানটি আসলে "প্রোগ্রাম ফাইল (x86)" হবে।


যথেষ্ট সত্য। যাইহোক, এটা সুস্পষ্ট যে, তার আবেদন করা হয় অন্যথায় GetFolderPath () ইতিমধ্যে যাহাই হউক না কেন ডান এক্স 86 ফোল্ডারের ফিরে যাবে যেমন 32 বিট চলমান।
টমাসার

খুব উপকারী! এটি কেবল আমার কাজের ঘন্টা বাঁচিয়েছে! এবং আমার কোড ব্যবহার করা থেকে মানুষকে বাঁচিয়েছে। জিনিসগুলি বাক্সের বাইরে কাজ করার সময় দুর্দান্ত!
ডেভিড সিলভা স্মিথ

9

একটি উপায় হ'ল "প্রোগ্রাম ফাইল (x86)" পরিবেশের পরিবর্তনশীল:

String x86folder = Environment.GetEnvironmentVariable("ProgramFiles(x86)");

5

আমি একটি অ্যাপ্লিকেশন লিখছি যা উইন্ডোজ 7 এর জন্য x86 এবং x64 উভয় প্ল্যাটফর্মে চালানো যেতে পারে এবং নীচের ভেরিয়েবলটি অনুসন্ধান করা কেবল কোনও প্ল্যাটফর্মের ডান প্রোগ্রাম ফাইল ফাইলগুলির ফোল্ডারের পথ টানতে পারে।

Environment.GetEnvironmentVariable("PROGRAMFILES")

সত্যিই, এটি একটি গ্রহণযোগ্য উত্তর হিসাবে চিহ্নিত করা উচিত। যুক্তি পরীক্ষা করার চেয়ে এটি অনেক ভাল। তবে এটি অ্যাপ্লিকেশন সংকলিত বিট-টাইপের জন্য উপযুক্ত ফোল্ডারটি ফিরিয়ে দেবে। অর্থ, আপনি যদি 32 বিটে অ্যাপ্লিকেশনটি সংকলন করেন তবে এটি 32 বিবিটি ওএসে "প্রোগ্রাম ফাইলগুলি" এবং একটি 64 বিবিএস ওএসে "প্রোগ্রাম ফাইল (x86)" ফিরিয়ে দেবে। পারফেক্ট!
ডিসিপ্লিমিশেল

সতর্কতা অবলম্বন করুন: প্রশ্নটি হল "উইন্ডোজ bit৪ বিটে প্রোগ্রাম ফাইলগুলি (x86) কীভাবে পাবেন" এবং "চলমান অ্যাপ্লিকেশনের সঠিক প্রোগ্রাম ফাইল ফোল্ডারটি কীভাবে পাবেন" তা নয়। সুতরাং এই উত্তর, এটি কার্যকারিতার দিক থেকে সঠিক, প্রশ্নের কোনও প্রাসঙ্গিক উত্তর নয়।
tedbus

0

.NET- এ নতুন পদ্ধতি ব্যবহার করে ওয়ান-লাইনার। সর্বদা x86 প্রোগ্রাম ফাইল ফোল্ডারটি ফিরিয়ে দেবে।

Environment.Is64BitOperatingSystem ? Environment.GetEnvironmentVariable("ProgramFiles(x86)") : Environment.GetEnvironmentVariable("ProgramFiles"))


0

সি # কোড:

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

আউটপুট:

সি: \ প্রোগ্রাম ফাইল (x86)

বিঃদ্রঃ:

আমাদের নির্দিষ্ট সংস্থার প্ল্যাটফর্মটি পছন্দ না করার জন্য আমাদের সংকলকটি বলতে হবে।

Go to Visual Studio > Project Properties > Build > Uncheck "Prefer 32 bit"

কারণ:

বেশিরভাগ নেট নেট প্রকল্পের জন্য ডিফল্টরূপে "কোনও সিপিইউ 32-বিট পছন্দসই" হয়

আপনি যখন 32 বিট বিধানসভা নির্বাচনটি চেক করবেন তখন:

জেআইটি থেকে 32-বিট কোডে 32 বিট প্রক্রিয়া

IT৪ বিট প্রক্রিয়াতে জিআইটি থেকে 32-বিট কোড

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