একবার আমার প্রোগ্রামটি ক্লায়েন্ট মেশিনে ইনস্টল হয়ে গেলে আমি কীভাবে আমার প্রোগ্রামটিকে উইন্ডোজ 7 এ প্রশাসক হিসাবে চালাতে বাধ্য করব ?
একবার আমার প্রোগ্রামটি ক্লায়েন্ট মেশিনে ইনস্টল হয়ে গেলে আমি কীভাবে আমার প্রোগ্রামটিকে উইন্ডোজ 7 এ প্রশাসক হিসাবে চালাতে বাধ্য করব ?
উত্তর:
আপনি প্রোগ্রামটিতে এম্বেড হওয়া ম্যানিফেস্টটি পরিবর্তন করতে চাইবেন ded এটি ভিজ্যুয়াল স্টুডিও ২০০৮ এবং তার চেয়েও বেশি ক্ষেত্রে কাজ করে: প্রকল্প + নতুন আইটেম যুক্ত করুন, "অ্যাপ্লিকেশন ম্যানিফেস্ট ফাইল" নির্বাচন করুন। <requestedExecutionLevel>উপাদানটি এতে পরিবর্তন করুন :
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
ব্যবহারকারীরা যখন প্রোগ্রামটি শুরু করেন তখন ইউএসি প্রম্পট পাবেন। বুদ্ধিমান ব্যবহার করুন; তাদের ধৈর্য দ্রুত ক্লান্ত হতে পারে।
requestedExecutionLevelআপনার ম্যানিফেস্টে কোনও উপাদান যুক্ত করা অর্ধেক যুদ্ধ; আপনাকে মনে রাখতে হবে যে ইউএসি বন্ধ করা যেতে পারে। যদি এটি হয় তবে আপনাকে পুরানো স্কুল উপায়ে চেকটি সম্পাদন করতে হবে এবং যদি ব্যবহারকারী প্রশাসক না হন
( IsInRole(WindowsBuiltInRole.Administrator)আপনার থ্রেডের দিকে ফোন করুন CurrentPrincipal) তবে একটি ত্রুটি সংলাপ তৈরি করতে হবে ।
<requestedExecutionLevel level="highestAvailable" uiAccess="false" /> পাশাপাশি
IsInRoleএন্ডার্স এর বিষয়ে এমএসডিএন উদাহরণ দেয় ।
বিস্তারিত পদক্ষেপগুলি নিম্নরূপ:
নোট করুন যে এই কোডটি ব্যবহার করে আপনাকে ক্লিকঅনস এর সুরক্ষা সেটিংস বন্ধ করতে হবে, এটি করার জন্য, বৈশিষ্ট্যগুলি -> সুরক্ষা -> ক্লিকঅনস সিকিউরিটির ভিতরে যেতে হবে
New Item...আমার ইনস্টলার পরিষেবা প্রকল্পে কোনও বিকল্প নয়। আমি কীভাবে অ্যাপ্লিকেশনটি প্রকাশ করতে যাব? আমি এটিকে আমার মূল প্রকল্পে যুক্ত করতে পারি তবে এটি ইনস্টলার নয়।
এটি ম্যানুয়ালি করার জন্য আমি কিছু কোড প্রয়োগ করেছি:
using System.Security.Principal;
public bool IsUserAdministrator()
{
bool isAdmin;
try
{
WindowsIdentity user = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(user);
isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch (UnauthorizedAccessException ex)
{
isAdmin = false;
}
catch (Exception ex)
{
isAdmin = false;
}
return isAdmin;
}
আপনি EXE ফাইলে একটি ম্যানিফেস্ট ফাইল এম্বেড করতে পারেন, যার ফলে উইন্ডোজ (7 বা তার বেশি) সর্বদা প্রশাসক হিসাবে প্রোগ্রামটি চালিত করে।
আপনি 6 ধাপে আরও বিশদ পেতে পারেন : একটি অ্যাপ্লিকেশন ম্যানিফেস্ট (ইউএসি) (এমএসডিএন) তৈরি এবং এম্বেড করুন ।
২০০৮ ভিজ্যুয়াল স্টুডিওতে কাজ করার সময়, ডানদিকে ক্লিক করুন Project -> Add New Itemএবং তারপরে বেছে নিন Application Manifest File।
ম্যানিফেস্ট ফাইলটিতে, আপনি ট্যাগটি পাবেন requestedExecutionLevelএবং আপনি স্তরটি তিনটি মানকে সেট করতে পারেন:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
অথবা
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
অথবা
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
প্রশাসক হিসাবে চালানোর জন্য আপনার অ্যাপ্লিকেশনটি সেট করতে, আপনাকে মাঝেরটি বেছে নিতে হবে।
যেমনটি
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
আপনার যদি ইতিমধ্যে একটি না থাকে বা কীভাবে কীভাবে যুক্ত করতে হয় তা জানেন না তবে আপনি একটি অ্যাপ্লিকেশন ম্যানিফেস্ট যুক্ত করতে চাইবেন। কিছু প্রকল্প স্বয়ংক্রিয়ভাবে আলাদা ম্যানিফেস্ট ফাইল যুক্ত না করে, প্রথমে প্রকল্পের বৈশিষ্ট্যগুলিতে যান, অ্যাপ্লিকেশন ট্যাবে নেভিগেট করুন এবং নিশ্চিত করুন যে আপনার প্রকল্পটি ট্যাপের নীচে ম্যানিফেস্টটি বাদ দিচ্ছে না তা নিশ্চিত করে দেখুন।
ভিজ্যুয়াল স্টুডিও 2010 এ আপনার প্রকল্পের নামটি ডান ক্লিক করুন। "উইন্ডোজ সেটিংস দেখুন" টিপুন, এটি "অ্যাপ্লিকেশন.মেনিফেস্ট" নামে একটি ফাইল উত্পন্ন এবং খোলে। এই ফাইলের মধ্যে "asInvoker" কে "প্রয়োজনীয়তা প্রশাসক" দিয়ে প্রতিস্থাপন করুন যেমনটি ফাইলের মধ্যে মন্তব্য করা বিভাগগুলিতে ব্যাখ্যা করা হয়েছে।
এটি করার আরেকটি উপায়, কেবল কোডে, প্রক্রিয়াটি @ এনজি দ্বারা উত্তরের মতো প্রশাসক হিসাবে চলছে কিনা তা সনাক্ত করা ।। এবং তারপরে আবার অ্যাপ্লিকেশনটি খুলুন এবং বর্তমানটি বন্ধ করুন।
আমি এই কোডটি তখন ব্যবহার করি যখন কোনও অ্যাপ্লিকেশনটির নির্দিষ্ট শর্তের অধীনে চলার সময় কেবল প্রশাসকের সুযোগ-সুবিধার দরকার হয় যেমন কোনও পরিষেবা হিসাবে নিজেকে ইনস্টল করার সময়। সুতরাং অন্যান্য উত্তরগুলিও এটিকে জোর করে, এমনভাবে অ্যাডমিন হিসাবে চালানোর দরকার নেই।
নীচের কোডটিতে নোটটি NeedsToRunAsAdminএমন একটি পদ্ধতি যা সনাক্ত করে যে যদি বর্তমান অবস্থার অধীনে অ্যাডমিন সুবিধাগুলি প্রয়োজন হয়। যদি এই ফিরে আসেfalse কোডটি সেগুলি নিজেই উন্নত হবে না। এটি অন্যদের চেয়ে এই পদ্ধতির একটি বড় সুবিধা।
যদিও এই কোডটির উপরে বর্ণিত সুবিধাগুলি রয়েছে তবে এটি নতুন প্রক্রিয়া হিসাবে নিজেকে পুনরায় চালু করতে হবে যা আপনি যা চান তা সর্বদা নয়।
private static void Main(string[] args)
{
if (NeedsToRunAsAdmin() && !IsRunAsAdmin())
{
ProcessStartInfo proc = new ProcessStartInfo();
proc.UseShellExecute = true;
proc.WorkingDirectory = Environment.CurrentDirectory;
proc.FileName = Assembly.GetEntryAssembly().CodeBase;
foreach (string arg in args)
{
proc.Arguments += String.Format("\"{0}\" ", arg);
}
proc.Verb = "runas";
try
{
Process.Start(proc);
}
catch
{
Console.WriteLine("This application requires elevated credentials in order to operate correctly!");
}
}
else
{
//Normal program logic...
}
}
private static bool IsRunAsAdmin()
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
runasকোনও প্রশাসক-প্রশাসক ব্যবহারকারীর কাছ থেকে প্রশাসক হিসাবে যেকোন কিছু চালু করার সুযোগ পাওয়ার জন্য আপনার ইউএসি সক্ষম হওয়া দরকার , অন্যথায় এটি বর্তমান ব্যবহারকারীর অনুমতি সহ নীরবে খোলা হবে (উইন্ডোজ 7 64 বিটে চেক করা হয়েছে)। যতদূর আমি কেবলমাত্র ইউসিএকে অক্ষম করতে করতে কেবল কাজটি করতে পারি এবং অ্যাডমিনের সঠিক অনুপস্থিতি হ'ল সঠিক মুহুর্তে কার্যকর করা বন্ধ করা।
আপনি ক্লিক অন সিকিউরিটি সেটিংস ব্যবহার করে ম্যানিফেস্টটি তৈরি করতে পারেন এবং তারপরে এটি অক্ষম করুন:
Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings
আপনি এটি ক্লিক করার পরে, অ্যাপ্লিকেশন হিসাবে প্রকাশিত প্রকল্পের বৈশিষ্ট্য ফোল্ডারের অধীনে একটি ফাইল তৈরি করা হবে this এটি তৈরি হয়ে গেলে আপনি এটিটি চেক করতে পারেনEnable ClickOnce Security Settings অপশনটি চেক
ফাইলটি খুলুন এবং এই লাইনটি পরিবর্তন করুন:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
প্রতি:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
এটি প্রোগ্রামটিকে প্রশাসকের সুযোগ-সুবিধার প্রয়োজন করবে।
এটি @NG দ্বারা উপরে এই উত্তরের সরলিকৃত সংস্করণ
public bool IsUserAdministrator()
{
try
{
WindowsIdentity user = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(user);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch
{
return false;
}
}
আপনার এক্সিকিউটেবলকে ডান ক্লিক করুন, প্রপার্টি> সামঞ্জস্যতে যান এবং 'এই প্রোগ্রামটি অ্যাডমিন হিসাবে চালান' বাক্সটি চেক করুন।
আপনি যদি এটি সমস্ত ব্যবহারকারীর প্রশাসক হিসাবে চালাতে চান তবে 'সমস্ত ব্যবহারকারীর জন্য পরিবর্তন সেটিংস' তে একই কাজ করুন।