উইন্ডোজের কোনও সংস্করণ কি কখনও এইরকম আচরণ করেছিল?


36

আজকের ডেইলিডব্লিউটিএফ নিবন্ধ দ্বারা অনুপ্রাণিত ।

লেখক দাবি করেছেন যে C:\Program.exeউদাহরণস্বরূপ, একটি শর্টকাটে ক্লিক করার সময় একটি ফাইল কার্যকর করা হবে C:\Program Files\Doom 2\doom2.exe -nomusic

মনে করা যায়, উইন্ডোজ প্রথমে C:\Programযুক্তি দিয়ে আবেদনের চেষ্টা করে Files\Doom 2/doom2.exe -nomusic

যদি C:\Program.exeএটি না থাকে তবে C:\Program Files\Doomএটি যুক্তি দিয়ে চেষ্টা করে 2/doom2.exe -nomusic

এবং যদি এটি না থাকে C:\Program Files\Doom.exe\তবে শেষ পর্যন্ত এটি চেষ্টা করে C:\Program Files\Doom 2\doom2.exe -nomusicএবং সফল হয়।

এটি আমার কাছে সম্পূর্ণ বাজে কথা বলে মনে হচ্ছে। আমি বিশ্বাস করতে পারি না যে এটি কখনও এভাবে কাজ করেছিল। একজন মন্তব্যকারী এটিকে ভালভাবে লিখেছেন :

আমার বিশ্বাস করা শক্ত হয় যে উইন্ডোজের কোনও প্রকাশিত সংস্করণ ওপি কর্তৃক বর্ণিত ট্রায়াল-অ্যান্ড-ত্রুটি পদ্ধতির কাজটি কখনও করেছিল।

আমি পুরোপুরি বিশ্বাস করি যে উইন্ডোজ একটি প্রকাশিত সংস্করণ ডিফল্ট হিসাবে মস্তিষ্ক-মৃত আচরণ ছিল। আমি বহুবার, বহুবার এটি প্রথম অভিজ্ঞতা পেয়েছি।

আমি যা বিশ্বাস করি না তা হ'ল উইন্ডোজের একটি প্রকাশিত সংস্করণটির এই মস্তিষ্ক-মৃত আচরণ ছিল, যেমনটি নিবন্ধটি বর্ণনা করেছে। কোনও র‌্যান্ডম ডেইলি ডাব্লুটিএফ জমা দেওয়ার বিষয়টি অবহেলা না করা পর্যন্ত এটির নিরাপত্তার ত্রুটি খুব বিশাল।

স্বচ্ছতার জন্য সম্পাদনা করুন: আমি নিজে এটি কীভাবে পরীক্ষা করেছি তা এখানে।

  1. নোটপ্যাড.এক্সে সি:। Program.exe এ অনুলিপি করুন
  2. রান সি: \ প্রোগ্রাম ফাইলগুলি \ ইন্টারনেট এক্সপ্লোরার \ iexplore.exe e
  3. নোটপ্যাড খোলে। এটি প্রত্যাশিত কারণ এটি সি: \ প্রোগ্রাম নামে কিছু আবিষ্কার করে
  4. Progam.exe সি: \ প্রোগ্রাম ফাইল \ Internet.exe এ যান Move
  5. রান সি: \ প্রোগ্রাম ফাইলগুলি \ ইন্টারনেট এক্সপ্লোরার \ iexplore.exe e

নিবন্ধটির লেখক ( এবং মাইক্রোসফ্ট থেকে এই নিবন্ধ ) এর মতে , নোটপ্যাডটি এখনও খোলা উচিত। তবে এটি হয় না, আদেশটি এই বার্তাটির সাথে ব্যর্থ হয়:

C:\program is not recognized as an internal or external command, operable program or batch file.

আবার, আমি নিবন্ধটির দাবি নিয়ে বিতর্ক করছি না যে সি: \ প্রোগ্রামটি চালু করা হবে। আমি বিতর্ক করছি যে উইন্ডোজ কোনও ডিরেক্টরি হিট না হওয়া পর্যন্ত প্রতিটি ডিরেক্টরি পুনরাবৃত্তভাবে চেষ্টা করে।

সুতরাং, উইন্ডোজ কোনও সংস্করণ কখনও এইভাবে কাজ করে?


1
হ্যাঁ ! @ Grawity এর উত্তর এখানে দেখুন: superuser.com/a/373756/100787
iglvzx

2
); আপনি সকল মন্তব্য চেক করা উচিত ছিল msdn.microsoft.com/en-us/library/windows/desktop/...
Baarn

দেখে মনে হচ্ছে এখানে দুটি (বা আরও) পৃথক প্রশ্ন চলছে: উইন্ডোজ আপনাকে কী শর্টকাট তৈরি করার অনুমতি দেয় C:\Program Files\...এবং উইন্ডোজ যেমন শর্টকাট (বা রান কমান্ড, বা কমান্ড-প্রম্পট কমান্ড, বা অন্য কোনও পদ্ধতির) ব্যাখ্যা করবে "C:\Program" Files\...? প্রথম অংশটি অসম্ভব বলে মনে হচ্ছে, তবে দ্বিতীয় ভাগটি আমার কাছে সম্ভাব্য এবং প্রত্যাশিত বলে মনে হচ্ছে।
mwfearnley

তৃতীয় প্রশ্ন, আমি অনুমান, হল: কোনো উইন্ডোজ কম্যান্ড-চলমান পদ্ধতি ব্যাখ্যা করা হবে C:\Program Filesহিসাবে "C:\Program Files"? কিছুটা পড়া থেকে দেখে মনে হচ্ছে উত্তরটি "হ্যাঁ" হতে পারে যা একমাত্র সত্যই অপ্রত্যাশিত অঞ্চল।
mwfearnley

উত্তর:


32

দীর্ঘ ফাইলের নাম থেকে উইন্ডোজের প্রতিটি সংস্করণ উইন্ডোজ 95 এবং উইন্ডোজ 7 অন্তর্ভুক্ত পর্যন্ত এইভাবে কাজ করে।

এটি আচরণ নথিভুক্ত করা হয় :

LpApplicationName প্যারামিটার হতে পারে শূন্য । সেক্ষেত্রে lpCommandLine স্ট্রিংয়ে মডিউলটির নামটি অবশ্যই প্রথম সাদা স্থান – সীমিত টোকেন । আপনি যদি একটি দীর্ঘ ফাইলের নাম ব্যবহার করেন যা কোনও স্থান থাকে, যেখানে ফাইলের নামটি শেষ হয় এবং আর্গুমেন্টগুলি শুরু হয় তা বোঝাতে উদ্ধৃত স্ট্রিংগুলি ব্যবহার করুন; অন্যথায়, ফাইলের নাম অস্পষ্ট। উদাহরণস্বরূপ, স্ট্রিংটি বিবেচনা করুন "সি: \ প্রোগ্রাম ফাইলগুলি \ সাব ডির \ প্রোগ্রামের নাম"। এই স্ট্রিংটি বিভিন্ন উপায়ে ব্যাখ্যা করা যায়। সিস্টেমটি নিম্নলিখিত ক্রমে সম্ভাব্যতার ব্যাখ্যা করার চেষ্টা করে:

c:\program.exe files\sub dir\program name
c:\program files\sub.exe dir\program name
c:\program files\sub dir\program.exe name
c:\program files\sub dir\program name.exe

কেন এটি এইভাবে জিজ্ঞাসা করে - যাতে এটি এমন প্রোগ্রামগুলিকে ভঙ্গ না করে যেগুলি ফাইলের নামগুলিতে স্পেসগুলি সঠিকভাবে পরিচালনা করতে পারে না

সম্পাদনা এটি "রান" কমান্ডটি এর মতো আচরণ করে না বলে মনে হয় - এই সঠিক কেসটি পরিচালনা করতে এটিতে কিছু অতিরিক্ত যুক্তি যুক্ত করতে হবে have তবে অন্য কোথাও থেকে চালানোর চেষ্টা করা হচ্ছে - CreateProcessসরাসরি ফাংশনটি ব্যবহার করা সহ যা বেশিরভাগ অ্যাপ্লিকেশন কমান্ড চালাতে ব্যবহার করবে।

ক্রিয়াকলাপে এই আচরণটি দেখুন:

  1. প্রশাসনিক কমান্ড প্রম্পট খুলুন
  2. চালান: copy c:\Windows\System32\notepad.exe c:\program.exe
  3. চালান: c:\Program Files\Internet Explorer\iexplore.exe
  4. নোটপ্যাড আপনাকে খুলে বলবে এটি এটি খুঁজে পাবে না Files\Internet Explorer\iexplore.exe
  5. c:\Program Files\Internet Explorer\iexplore.exeরান অপশনে টাইপ করুন এবং আইই সঠিকভাবে খুলবে।

আপনার C:\program files\internet.exeউদাহরণের ক্ষেত্রে 2 সম্পাদনা করুন ; আমি বিশ্বাস করি যে এটি কমান্ড লাইনের দোভাষী হচ্ছেন। এটি কমান্ড লাইনটি ফাঁক দিয়ে বিভক্ত পরামিতিগুলিতে প্রক্রিয়াকরণ এবং টোকেনাইজ করার চেষ্টা করে। সুতরাং এটি C:\programপ্রথম টোকেন হিসাবে গ্রহণ করে এবং ব্যাখ্যা করে যে প্রোগ্রামটির নাম হিসাবে পরামিতি হিসাবে বাকি।

একটি পরীক্ষার জন্য আমি একটি ছোট অ্যাপ্লিকেশন তৈরি করেছি যা CreateProcessসরাসরি কল করে এবং এটি ডকুমেন্টের মতোই আচরণ করে। আপনার C:\program files\internet.exeউদাহরণ চালু হবে C:\program files\internet.exe। সুতরাং দেখা যাচ্ছে যে আচরণটি ঠিক কমান্ডটি চালাচ্ছে তার উপর নির্ভর করে - কোনও কিছু কমান্ড লাইনটি পাস করার আগে প্রক্রিয়াজাত করে CreateProcess

উদাহরণ প্রোগ্রাম:

#include <Windows.h>

void main()
{
    STARTUPINFO si = {0};
    si.cb= sizeof(si);
    PROCESS_INFORMATION pi = {0};

    CreateProcess(NULL, "c:\\program files\\internet explorer\\iexplore.exe",
            NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
}

1
কেন এটি আমার প্রশ্নের উত্তর দেয় না তার জন্য আমার সম্পাদনা দেখুন। আপনি প্রদত্ত ক্রমে কেবল প্রথমটি পরীক্ষা করেছেন, আমি দ্বিতীয়টির বিষয়ে জিজ্ঞাসা করছি।
ডিপ্যাচারি

আমি নিজেই আরও কিছু গবেষণা করেছি এবং আমি আপনার সর্বশেষ সম্পাদনার সাথে একমত - এটি দেখতে দেখতে যে মতবিরোধটি cmd.exe এবং তৈরিপ্রসেস ফাংশনের মধ্যে রয়েছে। রঙিন আমাকে বিশ্বাস!
dpatchery

এই ভাগে সঠিক বলে মনে করে না: আপনার সি: \ Program Files \ internet.exe উদাহরণ সি আরম্ভ হবে: \ Program Files \ internet.exe
ড্যানিয়েল অঙ্গুলিনির্দেশ

CreateProcessএমএসডিএন- এর পৃষ্ঠা অনুসারে , lpApplicationName প্যারামিটারটি NULL হলেই এটি ঘটে । অন্যথায়, সিস্টেমটি সেই পরামিতিটিকে প্রোগ্রাম হিসাবে চালু করার জন্য ব্যবহার করবে এবং এটি এটি অনুসন্ধান করবে না। আমি ধরে নেব যে "রান" কমান্ডটি এখানে কোনও নুল প্যারামিটার সরবরাহ করে না , সুতরাং এটি প্রোগ্রামটির জন্য এইভাবে অনুসন্ধান করবে না।
কেভিন প্যাঙ্কো

1
@ shf301 এটি আসলে ব্যবহার করে ShellExecuteExএবং তারপরে সেগুলি কল করেCreateProcess
কেভিন প্যাঙ্কো

5

আমি কেবল পূর্বের উত্তরে কিছু যুক্ত করতে চাই।

যদিও চেষ্টাটি, খারাপ প্রোগ্রামিং (আরটিএফএম নয়) বা এই বিশেষ অ্যান্টিভাইরাস প্রোগ্রামের কারণে অগ্রহণযোগ্য নিখুঁত ঝড়ের মাধ্যমে এই আচরণটি জোর করা সম্ভব, নিবন্ধের দ্বারা বর্ণিত আচরণের কারণ কিছুই ঘটেনি। কোনওভাবেই কোনও শর্টকাট সঠিকভাবে তৈরি হবে না, উদাহরণস্বরূপ এমন একটি যা "সি: \ প্রোগ্রাম ফাইলগুলি \ মাইক্রোসফ্ট \ অফিস \ ওয়ার্ড.এক্সে" লক্ষ্য করে, উদ্ধৃতি সহ সি: \ প্রোগ্রাম.এক্সে চালিত করে। ফায়ারফক্সের সাথে একই। হেল, এটি একটি শর্টকাট তৈরি করা অসম্ভব যা সঠিকভাবে এড়ানো যাবে না, কারণ এটি বুদ্ধিমানের সাথে সম্পন্ন হয়েছে।

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

শর্টকাটের মতোই, রান ডায়ালগও স্ট্রিংটিকে সঠিকভাবে পার্স করে। কেবলমাত্র অপেক্ষাকৃত নিম্ন-স্তরের কমান্ড কনসোলে এটি ভুলভাবে সি:। Program.exe কল করবে তবে এটি অন্যান্য বিভিন্ন সম্ভাবনার চেষ্টা করবে না। এটি, এটি ভুলভাবে "সি: \ প্রোগ্রাম.এক্সই" কল করার চেষ্টা করবে, তবে "সি: \ প্রোগ্রাম ফাইলগুলি। ইন্টারনেট.exe" বা অন্য কোনও কিছু কল করার চেষ্টা করবে না, এমনকি যদি সেই সম্ভাবনাগুলি বিদ্যমান থাকে। এটি সি: \ Program.exe খুঁজে পাচ্ছে না বলে এটি একটি ত্রুটি ফিরিয়ে দেবে।

এবং সর্বোপরি, যখন সি: \ ফোল্ডারে একটি প্রোগ্রাম.এক্সি থাকে, এটি আপনাকে স্টার্টআপের সময় সতর্ক করে দেয় এবং জিজ্ঞাসা করে যে আপনি এটির নাম পরিবর্তন করতে চান কিনা। এটি এক্সপি, ভিস্তা, উইন্ডোজ 7 এর জন্য যাচাই করা হয়েছে এবং আমি এখন উইন্ডোজ 8 ( http://goo.gl/eeNCp ) যাচাই করতে পারি । হয়তো এই Windows 9x সম্ভব ছিল, কিন্তু আমি এটা সন্দেহ।

নীচের লাইনটি, এটি সুস্পষ্ট এবং কোনও উইন্ডোজ প্রোগ্রামার এই ভুল করবে না।

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