Bit৪ বিট উইন্ডোতে% প্রোগ্রামফায়াল% পার্থক্য


8

একটি কমান্ড প্রম্পট থেকে, আমি নিম্নলিখিত পেতে:

>echo %ProgramFiles%
C:\Program Files

যাইহোক, কিছু অ্যাপ্লিকেশন (এই ক্ষেত্রে পিএইচপি, যদিও আমি অ্যাপাচের httpd.conf থেকে একই আচরণ দেখেছি) তা হ'ল:

>php -r "echo $_ENV['ProgramFiles'];"
C:\Program Files (x86)

কেন?

পটভূমি: আমি এমন স্ক্রিপ্টগুলি বিকাশ করছি যা হোস্ট ওএসের 32 অবিট বা 64 বিট হওয়ায় অজ্ঞানীয় এবং কনফিগারেশন ফাইলের জন্য এটি দুর্দান্ত কাজ করে। একটি 32 বিট সিস্টেমে %ProgramFiles%হ'ল "সি: \ প্রোগ্রাম ফাইলগুলি" এবং 64৪ বিট সিস্টেমে একই দেখা যায় %ProgramFiles%যা প্রত্যাবর্তন করে C:\Program Files (x86)। আমি কেবল কৌতূহলী যে আমি যখন উইন্ডোজ কমান্ড প্রম্পট (বা এক্সপ্লোরার বারে ইত্যাদি) থেকে চেষ্টা করি তখন কেন এটি সত্য হয় না। একটি 64 বিট কমান্ড প্রম্পট বা কিছু আছে?


উভয় পরিবেশে, %programfiles%রিটার্নগুলি C:\Program Files(উইন্ডোজের একটি ডিফল্ট কনফিগারেশনে)। উইন্ডোজ এর x64 সংস্করণে, %programfiles(x86)ফিরে আসে C:\Program Files (x86)। পিএইচপি কেন তার বিপরীতে কিছু ফিরিয়ে দিচ্ছে তা নিশ্চিত নয়, তবে আপনি setx64 উইন্ডোজ এবং x86 উইন্ডোজ কমান্ড প্রম্পট থেকে চালিত কোনও নির্দিষ্ট সিস্টেমের জন্য পরিবেশগত পরিবর্তনশীলগুলি কী সেট করে তা আপনি সহজেই যাচাই করতে পারেন ।
MDMarra

উত্তর:


12

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

এই আচরণটি নিবন্ধক পুনঃনির্দেশ সিস্টেম দ্বারা নির্ধারিত হয় যা 64৪-বিট অপারেটিং সিস্টেমের সাথে 32-বিট সফ্টওয়্যারটির পশ্চাদপটে সামঞ্জস্য সরবরাহ করে। 32-বিট পরিবেশ 32-বিট প্রোগ্রামগুলির জন্য অনুকরণ করা হয় এমনকি তারা যে ডেটাটিকে সম্বোধন করছেন তা অন্য কোনও জায়গায় অবস্থিত হয়েছে তা সত্ত্বেও।

৩২-বিট প্রোগ্রামে এ জাতীয় পুনঃনির্দেশটি এড়াতে, সংশ্লিষ্ট রেজিস্টার নোডগুলিতে অ্যাক্সেস করার সময় আপনার%% ফাইলফিল%% বা% COMMONPROGRAMFILES% (যেমন বিপরীত কেস সহ) ব্যবহার করা উচিত।


আসলে, পুনঃনির্দেশটি এড়িয়ে চলার পরিবর্তে, আমি এটি একটি উইন্ডোজ প্রম্পট থেকে কার্যকর করার চেষ্টা করছি; উদাহরণস্বরূপ, আমি স্ক্রিপ্ট করতে সক্ষম হতে চাই %ProgramFiles%এবং এটি C:\Program Files32 বেটে ব্যবহার করতে পারি এবং এখনও .৪ বিবিটে ব্যবহার C:\Program Files (x86)করতে পারি। এটি আপাচি এবং পিএইচপি উভয়ই কাজ করে এবং আমি এটি "সঠিক" কিনা তা নিয়ে মন্তব্য করতে পারি না, এটি নিফটির আচরণ। উদাহরণস্বরূপ, আমি ServerRoot "${ProgramFiles}\Zend\Apache2"httpd.conf এ সেট করতে পারি এবং এটি উইন্ডোজ সংস্করণ নির্বিশেষে জেন্ড / অ্যাপাচি ইনস্টল (যা 64৪ বিট-এর x86 ফোল্ডারে রয়েছে) সঠিকভাবে খুঁজে পেতে পারে।
কেন

3
আমার মেশিনে, 32-বিট কমান্ড শেল-এ, echo %programfiles%এখনও 32-বিট পাথ ফিরে আসে। তবে প্রোগ্রামাব্লু 6464৩৩২ নামের একটি ভেরিয়েবল রয়েছে যা 64৪-বিটের পথে নির্দেশ করে।
হ্যারি জনস্টন

এটি আমার পক্ষে কাজ করে না। এই সমস্ত ভেরিয়েবল একই পথে ফিরে আসে:var environmentVariables = new string[] { "%programfiles%", "%programfiles(x86)%", "%ProgramFiles%", "%commonprogramfiles%", "%COMMONPROGRAMFILES%" };
সাmaদ নেমতি

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