আমি কীভাবে আমার .NET অ্যাপ্লিকেশনটিকে প্রশাসক হিসাবে চালাতে বাধ্য করব?


875

একবার আমার প্রোগ্রামটি ক্লায়েন্ট মেশিনে ইনস্টল হয়ে গেলে আমি কীভাবে আমার প্রোগ্রামটিকে উইন্ডোজ 7 এ প্রশাসক হিসাবে চালাতে বাধ্য করব ?


3
বাইনারি ওয়ারিয়ার যা লিখেছিল তা ছাড়াও যদি আপনার প্রশাসকের সুবিধাগুলি থাকে তবে আপনি পরীক্ষা করতে কিছু কোড লিখতে চাইতে পারেন .. (আপনি যা চাইছেন তা কি?)
লেেক্সু

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

2
অ্যালেক্স পয়েন্টে খুব বেশি। যদি সম্ভব হয় তবে প্রয়োজনীয় হলে কেবল উন্নত করুন, অন্যথায় গ্রুপ পলিসি, ইউএসি এবং অন্যান্য বেশ কয়েকটি ভেরিয়েবল কার্যকর হয়। খুব কমপক্ষে, ইউএসি-র সাথে, ব্যবহারকারীকে কেবলমাত্র একটি নির্দিষ্ট ব্যবহারকারীর ক্রিয়া সম্পাদন করা হলে তার বিপরীতে প্রতিটি রান অনুমোদন করতে হবে।
অ্যান্টনি ম্যাসন

সঠিক উপায়টি হ'ল আপনার অ্যাপ্লিকেশনটিতে একটি ম্যানিফেস্ট ফাইল এম্বেড করা।
এলমু

উত্তর:


1144

আপনি প্রোগ্রামটিতে এম্বেড হওয়া ম্যানিফেস্টটি পরিবর্তন করতে চাইবেন ded এটি ভিজ্যুয়াল স্টুডিও ২০০৮ এবং তার চেয়েও বেশি ক্ষেত্রে কাজ করে: প্রকল্প + নতুন আইটেম যুক্ত করুন, "অ্যাপ্লিকেশন ম্যানিফেস্ট ফাইল" নির্বাচন করুন। <requestedExecutionLevel>উপাদানটি এতে পরিবর্তন করুন :

 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

ব্যবহারকারীরা যখন প্রোগ্রামটি শুরু করেন তখন ইউএসি প্রম্পট পাবেন। বুদ্ধিমান ব্যবহার করুন; তাদের ধৈর্য দ্রুত ক্লান্ত হতে পারে।


33
সংকলনের চেষ্টা করার সময় যদি আপনি ক্লিকঅনস ত্রুটি পান তবে এই উত্তরটি দেখুন: stackoverflow.com/questions/11023998/…
এসএসএস

17
আপনার প্রকল্পটি অ্যাপ্লিকেশনটিও অ্যাপ্লিকেশনটি ব্যবহার করার জন্য সেট আপ করতে হবে - প্রোজেক্ট প্রোপার্টিগুলিতে, "অ্যাপ্লিকেশন" ট্যাবটি পরীক্ষা করে দেখুন এবং নিশ্চিত করুন যে "রিসোর্সগুলি" এর অধীনে "ম্যানিফেস্ট:" সেটটি আপনার অ্যাপ্লিকেশনটিতে প্রকাশিত হয়েছে or ম্যানিফেস্ট ফাইল)
ভিক্টর চেলারু

7
ভিএস আমাকে অ্যাডমিন মোডে পুনঃসূচনা করার অনুরোধ করার আগে আমাকে প্রকল্পটি পুনরায় লোড করতে হয়েছিল।
জন

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

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

154

requestedExecutionLevelআপনার ম্যানিফেস্টে কোনও উপাদান যুক্ত করা অর্ধেক যুদ্ধ; আপনাকে মনে রাখতে হবে যে ইউএসি বন্ধ করা যেতে পারে। যদি এটি হয় তবে আপনাকে পুরানো স্কুল উপায়ে চেকটি সম্পাদন করতে হবে এবং যদি ব্যবহারকারী প্রশাসক না হন
( IsInRole(WindowsBuiltInRole.Administrator)আপনার থ্রেডের দিকে ফোন করুন CurrentPrincipal) তবে একটি ত্রুটি সংলাপ তৈরি করতে হবে ।


22
এছাড়াও আপনি ব্যবহার করতে পারে <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> পাশাপাশি
মার্ক ক্রাম

18
@ মার্কক্রাম: সর্বোচ্চটি বিদ্যমান এর সাথে কী করতে পারে? প্রশ্ন অ্যাডমিনকে বাধ্য করার বিষয়ে, সর্বজনীন উপলভ্য অ্যাডমিনিস্ট্রেটর প্রয়োজনের চেয়ে কম সীমাবদ্ধ এবং কোনও প্রশাসনিক প্রশাসক ব্যবহারকারী কোনও ইউএসি প্রম্পট ছাড়াই অ্যাপটি উন্নত করতে শুরু করতে দেবে, কেবল অ্যাডমিনদেরই অনুরোধ জানানো হবে ...
অ্যান্ডার্স


আমি সঠিক বিশদটি আর মনে করতে পারি না তবে আমি মনে করি এটি নির্ভর করে আপনি কী বোঝাতে চেয়েছেন তার উপর নির্ভর করে। "ইউএসি স্লাইডার "টিকে নীচে পুরোপুরি ফেলে রাখা ইউএসি অক্ষম করার মতো নয় (ভিস্তার বাদে)। যদি ইউএসি সম্পূর্ণরূপে অক্ষম থাকে তবে সম্পূর্ণ অখণ্ডতা স্তরের প্রক্রিয়াটি অক্ষম থাকে এবং কেবল 2000 / এক্সপি থেকে ক্লাসিক রানাস.এক্সে বৈশিষ্ট্য উপলব্ধ। অ্যাডমিন রোল চেক রানাস.এক্সি কেস পরিচালনা করে।
অ্যান্ডার্স

1
আমি সার্ভার ২০০৮ আর 2 এ সক্ষমলএলএএকে 0 এ সেট করেছি এবং প্রশাসক গোষ্ঠী থেকে নিজেকে সরিয়ে নিয়েছি, পুনরায় বুট করা হয়েছে এবং এখন এমন একটি এক্সি যা "=" প্রয়োজনীয় অ্যাডমিনিস্ট্রেটর "কোনও প্রম্পট ছাড়াই রান চালায়
তাল অ্যালনি

86

বিস্তারিত পদক্ষেপগুলি নিম্নরূপ:

  1. সমাধানে অ্যাপ্লিকেশন ম্যানিফেস্ট ফাইল যুক্ত করুন
  2. অ্যাপ্লিকেশন সেটিংটি "app.manifest" এ পরিবর্তন করুন
  3. অ্যাডমিনিস্ট্রেটরের জন্য "অনুরোধ করা এক্সকিউশনলিভেল" এর ট্যাগ আপডেট করুন।

সমাধানে ফাইল যুক্ত করা হচ্ছে

অ্যাপ্লিকেশন ম্যানিফেস্ট ফাইল নির্বাচন করুন

ম্যানিফেস্ট বিকল্পটি নির্বাচন করুন

ম্যানিফেস্ট ফাইল আপডেট করুন

নোট করুন যে এই কোডটি ব্যবহার করে আপনাকে ক্লিকঅনস এর সুরক্ষা সেটিংস বন্ধ করতে হবে, এটি করার জন্য, বৈশিষ্ট্যগুলি -> সুরক্ষা -> ক্লিকঅনস সিকিউরিটির ভিতরে যেতে হবে


New Item...আমার ইনস্টলার পরিষেবা প্রকল্পে কোনও বিকল্প নয়। আমি কীভাবে অ্যাপ্লিকেশনটি প্রকাশ করতে যাব? আমি এটিকে আমার মূল প্রকল্পে যুক্ত করতে পারি তবে এটি ইনস্টলার নয়।
হ্যাকস্ল্যাশ

61

এটি ম্যানুয়ালি করার জন্য আমি কিছু কোড প্রয়োগ করেছি:

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;
}

45
এটি কেবল সনাক্ত করে যদি প্রসঙ্গটি অ্যাডমিন হিসাবে চলমান থাকে তবে এটি ওপি-র অনুরোধ অনুসারে প্রশাসক হিসাবে চালানোর জন্য অ্যাপ্লিকেশনটির পূর্বাভাস দেয় না
ম্যাট উইলকো

5
আমি মনে করি না যে কোনও অ্যাপ্লিকেশনকে তার নিজস্ব পারফরম্যান্স বাড়ানোর জন্য বাধ্য করার কোনও প্রোগ্রামিক উপায় আছে। যদি সেখানে থাকত, তবে এটি বেশিরভাগ সুরক্ষা ঝুঁকিপূর্ণ ছিল, না?
মার্ক রিচম্যান

6
যদিও আপনার সমাধানটি ভাল তবে প্রশ্নটি আলাদা ছিল। ;)
যশ

এখানে এই পদ্ধতির একটি রিফ্যাক্টরড সংস্করণটি দেখুন এখানে stackoverflow.com/a/50186997 (বিষয়গত)
হাকান ফাস্টিক

এই প্রশ্নের উত্তর দেয় না!
এলম্যু

43

আপনি EXE ফাইলে একটি ম্যানিফেস্ট ফাইল এম্বেড করতে পারেন, যার ফলে উইন্ডোজ (7 বা তার বেশি) সর্বদা প্রশাসক হিসাবে প্রোগ্রামটি চালিত করে।

আপনি 6 ধাপে আরও বিশদ পেতে পারেন : একটি অ্যাপ্লিকেশন ম্যানিফেস্ট (ইউএসি) (এমএসডিএন) তৈরি এবং এম্বেড করুন


19

২০০৮ ভিজ্যুয়াল স্টুডিওতে কাজ করার সময়, ডানদিকে ক্লিক করুন Project -> Add New Itemএবং তারপরে বেছে নিন Application Manifest File

ম্যানিফেস্ট ফাইলটিতে, আপনি ট্যাগটি পাবেন requestedExecutionLevelএবং আপনি স্তরটি তিনটি মানকে সেট করতে পারেন:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

অথবা

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

অথবা

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

প্রশাসক হিসাবে চালানোর জন্য আপনার অ্যাপ্লিকেশনটি সেট করতে, আপনাকে মাঝেরটি বেছে নিতে হবে।


এইটা কাজ করে. যাইহোক, এটি সিএমডি অ্যাপ্লিকেশন চালানোর সময় একটি ফাঁকা সিএমডি উইন্ডো প্রদর্শিত হয়েছিল (পটভূমিতে কিছুটা এক্সি চালাতে সি # সেন্টিমিড অ্যাপ্লিকেশন ব্যবহার করে)।
WM

13

যেমনটি

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

আপনার যদি ইতিমধ্যে একটি না থাকে বা কীভাবে কীভাবে যুক্ত করতে হয় তা জানেন না তবে আপনি একটি অ্যাপ্লিকেশন ম্যানিফেস্ট যুক্ত করতে চাইবেন। কিছু প্রকল্প স্বয়ংক্রিয়ভাবে আলাদা ম্যানিফেস্ট ফাইল যুক্ত না করে, প্রথমে প্রকল্পের বৈশিষ্ট্যগুলিতে যান, অ্যাপ্লিকেশন ট্যাবে নেভিগেট করুন এবং নিশ্চিত করুন যে আপনার প্রকল্পটি ট্যাপের নীচে ম্যানিফেস্টটি বাদ দিচ্ছে না তা নিশ্চিত করে দেখুন।

  • পরবর্তী, প্রকল্পে ডান ক্লিক করুন
  • নতুন আইটেম যোগ করুন
  • সর্বশেষে, অ্যাপ্লিকেশন ম্যানিফেস্ট ফাইলটি সন্ধান করুন এবং ক্লিক করুন

12

ভিজ্যুয়াল স্টুডিও 2010 এ আপনার প্রকল্পের নামটি ডান ক্লিক করুন। "উইন্ডোজ সেটিংস দেখুন" টিপুন, এটি "অ্যাপ্লিকেশন.মেনিফেস্ট" নামে একটি ফাইল উত্পন্ন এবং খোলে। এই ফাইলের মধ্যে "asInvoker" কে "প্রয়োজনীয়তা প্রশাসক" দিয়ে প্রতিস্থাপন করুন যেমনটি ফাইলের মধ্যে মন্তব্য করা বিভাগগুলিতে ব্যাখ্যা করা হয়েছে।


6
এই উত্তরটি VB.NET :-) সম্পর্কে, সাধারণভাবে ভিএস 2010 নয়। "নতুন আইটেম যুক্ত করুন" উত্তরগুলি সি # সম্পর্কে। সি ++ এ আপনি প্রকল্প সেটিংসে এটি করতে পারেন।
ফিল্ম

12

এটি করার আরেকটি উপায়, কেবল কোডে, প্রক্রিয়াটি @ এনজি দ্বারা উত্তরের মতো প্রশাসক হিসাবে চলছে কিনা তা সনাক্ত করা । এবং তারপরে আবার অ্যাপ্লিকেশনটি খুলুন এবং বর্তমানটি বন্ধ করুন।

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

নীচের কোডটিতে নোটটি 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);
}

1
কেবল কোড-পদ্ধতির জন্য +1। নোট করুন যে runasকোনও প্রশাসক-প্রশাসক ব্যবহারকারীর কাছ থেকে প্রশাসক হিসাবে যেকোন কিছু চালু করার সুযোগ পাওয়ার জন্য আপনার ইউএসি সক্ষম হওয়া দরকার , অন্যথায় এটি বর্তমান ব্যবহারকারীর অনুমতি সহ নীরবে খোলা হবে (উইন্ডোজ 7 64 বিটে চেক করা হয়েছে)। যতদূর আমি কেবলমাত্র ইউসিএকে অক্ষম করতে করতে কেবল কাজটি করতে পারি এবং অ্যাডমিনের সঠিক অনুপস্থিতি হ'ল সঠিক মুহুর্তে কার্যকর করা বন্ধ করা।
সত্যই সুন্দর

9

আপনি ক্লিক অন সিকিউরিটি সেটিংস ব্যবহার করে ম্যানিফেস্টটি তৈরি করতে পারেন এবং তারপরে এটি অক্ষম করুন:

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" />

এটি প্রোগ্রামটিকে প্রশাসকের সুযোগ-সুবিধার প্রয়োজন করবে।


7

এটি @NG দ্বারা উপরে এই উত্তরের সরলিকৃত সংস্করণ

public bool IsUserAdministrator()
{
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch
    {
        return false;
    }
}

1
এই প্রশ্নের উত্তর দেয় না!
এলমিউ

@ এলমু যে আমি স্রেফ রিফ্যাক্টর করেছিলাম তার মূল উত্তরটিতে আপনার মন্তব্য যুক্ত করা আরও যুক্তিযুক্ত, আপনি আমার উত্তরটির একটি লিঙ্ক খুঁজে পেতে পারেন।
হাকান ফাস্টিক

-3

আপনার এক্সিকিউটেবলকে ডান ক্লিক করুন, প্রপার্টি> সামঞ্জস্যতে যান এবং 'এই প্রোগ্রামটি অ্যাডমিন হিসাবে চালান' বাক্সটি চেক করুন।

আপনি যদি এটি সমস্ত ব্যবহারকারীর প্রশাসক হিসাবে চালাতে চান তবে 'সমস্ত ব্যবহারকারীর জন্য পরিবর্তন সেটিংস' তে একই কাজ করুন।


4
এটি প্রশ্নের উত্তর দেয় না। "একবার আমার প্রোগ্রামটি ক্লায়েন্ট মেশিনে ইনস্টল হয়ে গেলে", "আমি কীভাবে করব না"।
জো

অস্পষ্ট থাকার জন্য দুঃখিত। আপনার প্রোগ্রামটি ইনস্টল হয়ে গেলে, এই নির্বাহের বৈশিষ্ট্যগুলিতে (আপনার মূল প্রোগ্রাম, ইনস্টলার নয়) এই সেটিংটি পরিবর্তন করুন। তিনি তার প্রোগ্রামকে প্রশাসক হিসাবে চালাতে বাধ্য করতে চান না।
স্লিকজয়েড

2
ম্যানিফেস্টে প্রশাসকের প্রয়োজনীয়তা সেট করা আরও ভাল Its আমি যুক্তি দিয়েছি এটির প্রশ্নের উত্তর দিয়েছে, তবে কেবল সবেমাত্র।
ব্র্যাডলিডটনেট

3
@ জো ন্যায়সঙ্গত হওয়ার জন্য, গ্রহণযোগ্য উত্তরটি ওপিএস প্রশ্নের উত্তর দেয় না কারণ আপনাকে অ্যাপ্লিকেশন এক্সকে পুনরায় ইনস্টল করতে হবে। এটি "একবার আমার প্রোগ্রাম ইনস্টল হয়ে গেলে" এর সমাধান খুব কমই। যদি এই স্বল্প উত্তরটি যদি স্বীকৃত উত্তরের চেয়ে বেশি সঠিক হয়, তবে কেন উত্তরটি ৪০০++ ভোট পেয়েছে তা আমি বুঝতে পারি না।
নিকজি

আসলে, এটি উভয় প্রশ্নের পুরোপুরি উত্তর দেয়। একবার ইনস্টল হওয়া ম্যানিফেস্টটি পরিবর্তনের খুব বেশি সুযোগ নেই এবং প্রোগ্রামগুলি একবার চলার পরে তাদের অনুমতিগুলি উন্নত করার চেষ্টা করা উচিত নয় - অনেক পরিবেশে - এটি ম্যালওয়্যার বলা ভাল পথ। বেশিরভাগ সংস্থায় - এই উত্তরটি সর্বোত্তম কারণ এটি ব্যবহারকারী এবং তাদের অনুমতিগুলিতে অনুনাস রাখে। আমি প্রচুর কোড লিখি যা আমি উত্পাদনের পরে একবারে "দেখতে" বা চালাতে পারি না। আপনার নিজের সুরক্ষার উদ্বেগের চেয়ে আরও চালাক হওয়ার চেষ্টা করবেন না।
জিনজাই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.