শুধুমাত্র প্রয়োজনে কীভাবে সুবিধা বাড়ানো যায়?


85

এই প্রশ্নটি উইন্ডোজ ভিস্তার ক্ষেত্রে প্রযোজ্য!

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

আমি নির্দিষ্ট পদ্ধতি সম্পর্কে ভাবছি যার মাধ্যমে আমি কোনও ইভেন্টে অ্যাপ্লিকেশন সুবিধাটি উন্নত করতে পারি (যেমন একটি বোতাম টিপুন)। উদাহরণ:

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

উত্তর:


58

আমি বিশ্বাস করি না যে বর্তমানে চলমান প্রক্রিয়াটি উন্নত করা সম্ভব। এটি উইন্ডোজ ভিস্তার মধ্যে অন্তর্নির্মিত যে প্রশাসনের সুযোগসুবিধা প্রসেস শুরু হওয়ার পরে কোনও প্রক্রিয়াতে দেওয়া হয়, যেমনটি আমি বুঝতে পারি। আপনি যদি ইউএসি ব্যবহার করে এমন বিভিন্ন প্রোগ্রামের দিকে তাকান, আপনার দেখতে হবে যে প্রত্যেকবার প্রশাসনিক পদক্ষেপ নেওয়া দরকার হলে তারা প্রকৃতপক্ষে একটি পৃথক প্রক্রিয়া চালু করে (টাস্ক ম্যানেজার একজন, পেইন্ট.এনইটি অন্য একজন, প্রকৃতপক্ষে একটি নেট অ্যাপ্লিকেশন হ'ল) )।

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

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


4
উইন্ডোজ with এর সাথে কি কোনও পরিবর্তন আছে নাকি উত্তরটি "না, নতুন প্রক্রিয়া ব্যবহার করুন" ধরে আছে? ধন্যবাদ ...
রদিম ভানসা

4
উইন্ডোজ 7 এর সাথে কোনও পরিবর্তন হয়নি আমি দুঃখিত, দুঃখিত। (আমি যতদূর জানি, এবং আমি উইন 7-তে একজন নিয়মিত ব্যবহারকারী / বিকাশকারী))
নলডোরিন

4
টাস্ক ম্যানেজার ঠিক এটিই করেন। আপনি যখন সমস্ত ব্যবহারকারীর জন্য কাজগুলি প্রদর্শন করতে বোতামটি ক্লিক করেন এটি বর্তমান টাস্ক ম্যানেজারের উপস্থিত থাকে তখন প্রশাসনিক অধিকার সহ অন্য কোনও টাস্ক ম্যানেজারকে অনুরোধ করে।
নাটালি অ্যাডামস

4
@ নাথানএডামস প্রযুক্তিগতভাবে এটি প্রথমে নতুন টাস্ক ম্যানেজারটি খোলে। নাহলে, খোলার কাজটি কী করছে? :-)
wizzwizz4

16

সেখানে যেমন বলা হয়েছিল :

Process.StartInfo.UseShellExecute = true;
Process.StartInfo.Verb = "runas";

রেজিস্ট্রি দিয়ে আপনার যা প্রয়োজন তা করতে অ্যাডমিন হিসাবে প্রক্রিয়াটি চালাবেন, তবে সাধারণ সুযোগ-সুবিধাগুলি সহ আপনার অ্যাপে ফিরে আসুন।


এটি একটি নতুন প্রক্রিয়া বিস্তৃত জড়িত। ঠিক? আমি বর্তমান প্রক্রিয়া নিজেই উন্নীত করার সুযোগ খুঁজছিলাম।
হেমন্ত

প্রক্রিয়া করার জন্য ব্যবহারের চেষ্টা করুন etগেটকন্টারপ্রসেস ()
আবাটিশচেভ

27
আপনি বর্তমানে চলমান প্রক্রিয়াটিকে উন্নত করতে পারবেন না।
জ্যাকব প্রোফিট

4
এটি সত্য নয়। আপনি প্রক্রিয়াটির মালিককে পরিবর্তন করতে এবং ব্যবহারকারীকে প্রশাসনিক ক্ষমতা প্রদানের জন্য ডিএসিএল এবং এসিএল মানগুলি সেট করতে পারেন ....
নাইটফোর্স 2

4
@ নাইটফোর্স ২: অবশ্যই যদি এটি ইতিমধ্যে কার্যকর হয় তবে আপনার যদি ইতিমধ্যে প্রশাসনিক অধিকার থাকে (যেমন আপনি ইতিমধ্যে উন্নত)। অন্যথায় অ্যাডজাস্টটোকেন প্রাইভিলিজ ইত্যাদি সহজেই ব্যর্থ হবে, না?
বেন শ্বেইন

13

নিম্নলিখিত এমএসডিএন কেবি নিবন্ধ 981778 কীভাবে একটি অ্যাপ্লিকেশনকে 'স্ব-উন্নতি' করতে হবে তা বর্ণনা করে:

http://support.microsoft.com/kb/981778

এটিতে ভিজ্যুয়াল সি ++, ভিজ্যুয়াল সি #, ভিজ্যুয়াল বেসিক.এনইটি-তে ডাউনলোডযোগ্য নমুনা রয়েছে।

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

উচ্চতা সরাতে আপনার অ্যাপ্লিকেশনটি ছাড়তে হবে।


4
একটি বোতামের জন্য কার্যকর, তবে আপনি যখন মেনু আইটেমটির জন্য একই চান, আপনি সত্যিই এক বিভ্রান্তিকর জগাখিচুড়ি জন্য থাকবেন।
নাইয়ারগডস

4
@ টড আপনি কোডটি এখানে পেতে পারেন: https://code.msdn.microsoft.com/windowsapps/CSUACSelfElevation-644673d3
ম্যাথি

উত্তরের লিঙ্কটি মারা গেছে এবং মন্তব্যের লিঙ্কটি 2608 আইটেম দীর্ঘ তালিকাতে নির্দেশ করে।
DonBoitnott

আপনি এটি এখানে
2'20


2

সম্ভবত কেউ এই সহজ উদাহরণ ব্যবহার করে:

using System;
using System.Linq;
using System.Reflection;
using System.Diagnostics;
using System.Security.Principal;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    internal static class Program
    {
        private class Form1 : Form
        {
            internal Form1()
            {
                var button = new Button{ Dock = DockStyle.Fill };
                button.Click += (sender, args) => RunAsAdmin();
                Controls.Add(button);

                ElevatedAction();
            }
        }

        [STAThread]
        internal static void Main(string[] arguments)
        {
            if (arguments?.Contains("/run_elevated_action") == true)
            {
                ElevatedAction();
                return;
            }

            Application.Run(new Form1());
        }

        private static void RunAsAdmin()
        {
            var path = Assembly.GetExecutingAssembly().Location;
            using (var process = Process.Start(new ProcessStartInfo(path, "/run_elevated_action")
            {
                Verb = "runas"
            }))
            {
                process?.WaitForExit();
            }
        }

        private static void ElevatedAction()
        {
            MessageBox.Show($@"IsElevated: {IsElevated()}");
        }

        private static bool IsElevated()
        {
            using (var identity = WindowsIdentity.GetCurrent())
            {
                var principal = new WindowsPrincipal(identity);

                return principal.IsInRole(WindowsBuiltInRole.Administrator);
            }
        }

    }
}

1

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

আমি কোডটি ডাউনলোড করে ডাউনলোড করেছিলাম তা নিশ্চিত করার জন্য, তবে এটি মূল এমএসডিএন নিবন্ধ থেকে:

4. উচ্চতা অনুমোদনের জন্য হ্যাঁ ক্লিক করুন। তারপরে, মূল অ্যাপ্লিকেশনটি পুনরায় চালু হবে, একটি উন্নত প্রশাসক হিসাবে চলবে।
5. অ্যাপ্লিকেশন বন্ধ করুন।


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