উইন্ডোজ পরিষেবা: আমি কি বর্তমান চলমান ডিরেক্টরিটি কনফিগার করতে পারি?


11

ডিফল্টরূপে, উইন্ডোজ পরিষেবাদি সিটেম 32 ডিরেক্টরিতে শুরু হয় (সাধারণত C:\WINDOWS\system32)।

কোনও আলাদা ওয়ার্কিং ডিরেক্টরি সেটআপ করার কোনও উপায় আছে কি? আমি নীচে কিছু রেজিস্ট্রি প্যারামিটারের কথা ভাবছি HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SomeService

সুতরাং - এটি করা যেতে পারে?


3
@ তোমালাক: এটি কি আপনার লেখা একটি পরিষেবা? আপনি কোডের মাধ্যমে এটি করতে পারেন, তবে পরিষেবা সেটিংসের মাধ্যমে কোনও উপায় আছে বলে আমি মনে করি না।
ম্যাটবি

না, এটি আমার লেখা কোনও পরিষেবা নয়। আমি এখানে কিছু অল্প-পরিচিত রেজিস্ট্রি সেটিং আশা করছিলাম।
তোমালাক

এটি করার উদ্দেশ্য কী?
ব্যবহারকারী 35115

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

1
@ user35115, একটি নির্দিষ্ট অ্যাপ্লিকেশন ভর পরিবর্তন কনফিগারেশন সেটিংসে থাকার এড়াতে (Apache, বলছি, ইত্যাদি), যা সব আপেক্ষিক পরিশ্রমী ডিরেক্টরি।
পেসারিয়ার

উত্তর:


5

SetCurrentDirectoryপ্রক্রিয়া ইতিমধ্যে চালু হওয়ার পরে আপনি কল করতে ডিএলএল ইঞ্জেকশন ব্যবহার করতে পারেন । এটির জন্য আপনাকে ইনজেক্টর অ্যাপ্লিকেশন তৈরি করতে হবে, সাথে সাথে ইনজেকশনের জন্য ডিএলএল তৈরি করতে হবে। কিছু টিউটোরিয়াল বিদ্যমান; আমি যে দুটি সেরা খুঁজে পেয়েছি তা হ'ল:

সেগুলি পেতে আপনার কাছে একটি শালীন পরিমাণের সি ++ প্রোগ্রামিং ব্যাকগ্রাউন্ড (এবং একটি ওয়ার্কিং বিল্ড এনভায়রনমেন্ট) প্রয়োজন।

যাইহোক, এটি ধরে নিয়েছে যে পরিষেবাটি বর্তমান ডিরেক্টরিটিতে দেখছে। আরেকটি সম্ভাবনা হ'ল এটি ব্যবহার করছে %path%। আপনি বলছেন যে এটি "থেকে শুরু হয় system32, আরও কয়েকটি অবস্থানের চেষ্টা করে এবং শেষ পর্যন্ত এটির নিজস্ব ডিরেক্টরিতে" চেষ্টা করে, তাই এটি আমার কাছে সম্ভবত আরও বেশি সম্ভবত বলে মনে হয়।

আপনি যে ডিরেক্টরিটি দেখতে পান সেগুলি procmonআপনার সাথে তুলনা করুন %path%। যদি সেগুলি একই হয় তবে পরিষেবাটি চালাচ্ছে ব্যবহারকারী SYSTEM %path%বা যেকোন একটিতে সংশোধন করার বিষয়টি বিবেচনা করুন %path%, যাতে আপনি যে ডিরেক্টরিটি অনুসন্ধান করতে চান সেটি প্রথমে রয়েছে।

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


সিস্টেম PATH এনভায়রনমেন্ট ভেরিয়েবলটি আমার জন্য সবার আগে মনে আসে। PATH ভেরিয়েবলের শুরুতে পরিষেবার পথ সন্নিবেশ করানো তবে অন্য প্রতিটি অ্যাপ্লিকেশনটির পারফরম্যান্সে নেতিবাচক প্রভাব ফেলবে তাই আমি এটিকে পরামর্শ দেব না।
মার্নিক্স ভ্যান ভ্যালেন

এটিকে কোনওভাবেই সমর্থন করার মতো শক্ত সংখ্যা আমার কাছে নেই, তবে আমার অন্তর্নিহিততা আমাকে বলেছে যে পথটি পরিবর্তন করে কোনও ব্যবহারিক কর্মক্ষমতা অর্জন বা ক্ষতি ঘটবে না। এটি মোটামুটি সাধারণ পরিস্থিতি; উইন্ডোজ সমর্থন সরঞ্জামগুলি বা এসকিউএল সার্ভারকে ইনস্টলেশনের সময় পথটি পরিবর্তিত করার সময় সিস্টেমের কার্যকারিতাটিকে নেতিবাচকভাবে প্রভাবিত করার জন্য কেউ দোষ দেয় না, বলুন। এটি প্রথমবার নয় যখন আমি কাউকে প্রমনের দিকে তাকাতে এবং "ওএমজি, সমস্ত ফাইলের অ্যাক্সেসগুলি দেখুন!" দেখেছি, বুঝতে পারছি না যে এটি বেশিরভাগ অ্যাপ্লিকেশনের জন্য সাধারণ।
বিচ্ছেদ

সৃজনশীলতার জন্য +1। :-) আমি পুরোপুরি বুঝতে পারি যে এই ফাইল অপারেশনগুলি পরিমাপের পরিমাপের উপর প্রভাব ফেলবে না, তাই আমি আসলে কোনও ডিএলএল ইঞ্জেকশন সমাধান লেখার জন্য বিরক্ত করব না। পরিবর্তন %PATH%ব্যবহারকারীর জন্য সেবা রান অ্যাকাউন্ট, একটি শালীন ধারণা অধীনে যদিও।
টমলাক

1
কেবল এই পরিষেবাটি চালানোর জন্য একটি বিশেষ ব্যবহারকারী তৈরি করা এবং এই ব্যবহারকারীর জন্য% PATH% পরিবর্তন করা খুব ভাল উপায় হিসাবে মনে হচ্ছে। +1
সানি

@ ফিশন: হ্যাঁ, এর অর্থ এই যে আমি আপনার উত্তরটি গ্রহণ করি। ;) আমি যা আশা করেছিলাম তা নয়, এটি যতটা কাছে যায় তত কাছাকাছি, আমার ধারণা।
তোমালাক

1

ম্যাটবির মতো, আমি পরিষেবা কোডের ডাব্লু / ও সোর্স কোডটিতে অ্যাক্সেস পরিবর্তন করার কোনও উপায় জানি না। এই নির্দিষ্ট দৃশ্যের জন্য, সম্ভবত অতিরিক্ত ডিরেক্টরি চেকগুলি সম্পূর্ণ পাঠ্য সূচীকরণ ক্রিয়াকলাপের জন্য প্রয়োজনীয় i / o এর পরিমাণের তুলনায় তত অযৌক্তিক ডিস্ক ক্রিয়াকলাপ চাপিয়ে দেয় না। এমনকি যদি আপনি এগুলি অপ্টিমাইজ করতে পারেন তবে পুরো পাঠ্য সূচিটি জন্তুটির প্রকৃতির দ্বারা ডিস্ক নিবিড় হবে।


1

প্যারামিটার কীগুলিতে একটি "অ্যাপডিরেক্টরি" স্ট্রিংয়ের মান যুক্ত করুন এবং আপনার পছন্দসই কার্যকরী ডিরেক্টরিতে মান সেট করুন।


হুঁ। সবেমাত্র পরীক্ষা করা হয়েছে, কাজ করছে বলে মনে হচ্ছে না (উইন্ডোজ On-এ, REG_EXPAND_SZ ডেটা টাইপ ব্যবহৃত হয়েছে)। দয়া করে আপনি এটি পুনরায় নিশ্চিত করতে পারেন যে এটি আপনার পক্ষে কাজ করে?
Tomalak

এটি ব্যবহার করার সময় কাজ করে srvany। সাধারণ পরিষেবাদি সম্পর্কে নিশ্চিত নয়।
কনস্ট্যান্টিন স্পিরিন

1

পরিষেবার মূল ফাংশনের মধ্যে এটি করুন:

  • একটি কল করুন GetModuleFilename। এটি মডিউলটি (উদাহরণ) ফাইলের নাম সহ ফর্মটিতে পুনরুদ্ধার করবে C:\path\to\exe\your_service.exe
  • শেষ ব্যাকস্ল্যাশ সন্ধান করতে স্ট্রিং ম্যানিপুলেশনগুলি (সম্ভবত std::stringফাংশন ব্যবহার করে find_last_of()) ব্যবহার করুন । আপনার মডিউলের পাথ এবং সে জন্য আপনার এক্সপের ডিরেক্টরিটি পাওয়ার জন্য সেখান থেকে স্ট্রিংটি স্ট্রিম / ট্রিম করুন।
  • ফাংশন SetCurrentDirectoryএবং voila একটি কল করুন !

1
getModuleFilename ফাংশন কলের এইচএমওডল প্যারামিটারটি বাতিল করতে ভুলবেন না :)
uprPointch
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.