সি # থেকে কম্পিউটার কীভাবে বন্ধ করবেন


138

সি # প্রোগ্রাম থেকে কম্পিউটার বন্ধ করার সর্বোত্তম উপায় কী?

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

উত্তর:


171

উইন্ডোজ এক্সপি দিয়ে শুরু করে কাজ করে, উইন 2000 বা তার চেয়ে কম উপলভ্য নয়:

এটি করার দ্রুততম উপায়:

Process.Start("shutdown","/s /t 0");

অন্যথায় অন্যরা যেমন বলেছেন পি / ইনভোক বা ডাব্লুএমআই ব্যবহার করুন।

সম্পাদনা করুন: কীভাবে উইন্ডো তৈরি করা এড়ানো যায়

var psi = new ProcessStartInfo("shutdown","/s /t 0");
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
Process.Start(psi);

2
এটি পরিষেবাগুলি থেকেও কাজ করে বলে মনে হচ্ছে (কমপক্ষে আমি যে পরিস্থিতিগুলির সাথে সম্পর্কিত সেগুলির মধ্যে)। কোনও পরিষেবা থেকে কাজ করার জন্য আমি কখনই ডাব্লুএমআই বা এক্সিট উইন্ডোএক্স পদ্ধতি অর্জন করতে সক্ষম হইনি।
জেমস

1
@ জেমস এটি কারণ যে কোনও পরিষেবাতে সাধারণত এর অনুমতি থাকে না।
কে_

Usingতিহ্যবাহী শাটডাউন ডায়ালগ উইন্ডোটি ব্যবহার করার চেয়ে মেশিনের বিদ্যুত ব্যবহারের অবস্থাটি এটি ব্যবহারের পরে আলাদা। ব্যাক আপটি পাওয়ার জন্য পাওয়ার বাটনটি চাপ দিলে স্ট্যান্ডার্ড 300 + ইশ না করে প্রায় 80-85 মিলিঅ্যাম্পস আঁকবে। কেন তা জানতে পারলে এখানে আবার পোস্ট করব। এটি বেশিরভাগ ব্যবহারকারীকে প্রভাবিত করবে না।
সামুয়েলস্ক

এটি দুর্দান্ত কাজ করে, আপনি যদি ডাব্লুপিএফ এ থাকেন তবে এটি পেশাদার পেশাদার নয়, দ্বিতীয় বিভাজনের জন্য একটি কনসোল উইন্ডো তৈরি করবে।
ডাস্টিন জেনসেন

79

থেকে নেওয়া: একটি গিপ্পিডিয়া পোস্ট

উইন্ডোজ বন্ধ করতে এই পদ্ধতিটি ডাব্লুএমআই ব্যবহার করে ।

আপনার সিস্টেমের একটি রেফারেন্স যুক্ত করতে হবে this এটি ব্যবহার করার জন্য আপনার প্রকল্পে পরিচালনা।

using System.Management;

void Shutdown()
{
    ManagementBaseObject mboShutdown = null;
    ManagementClass mcWin32 = new ManagementClass("Win32_OperatingSystem");
    mcWin32.Get();

    // You can't shutdown without security privileges
    mcWin32.Scope.Options.EnablePrivileges = true;
    ManagementBaseObject mboShutdownParams =
             mcWin32.GetMethodParameters("Win32Shutdown");

     // Flag 1 means we want to shut down the system. Use "2" to reboot.
    mboShutdownParams["Flags"] = "1";
    mboShutdownParams["Reserved"] = "0";
    foreach (ManagementObject manObj in mcWin32.GetInstances())
    {
        mboShutdown = manObj.InvokeMethod("Win32Shutdown", 
                                       mboShutdownParams, null);
    }
}

3
ডাব্লুএমআই ব্যবহার করে ত্রুটিগুলি ট্র্যাক করা সহজ করে তোলে। শাটডাউন কমান্ড যদি কোনও কারণে কাজ না করে তবে কি হবে?
রব ওয়াকার

2
আমি উইন্ডোজ বন্ধ করতে এই পদ্ধতিটি ব্যবহার করছি, এবং তিনবারের মধ্যে দু'বার এটি আমাকে বলবে যে আমার অনুমতি নেই, তবে তৃতীয়বার এটি "হাল ছেড়ে দেয়" এবং যেভাবেই কম্পিউটারটিকে পুনরায় চালু করে। কি হয়েছে?
ডিটিআই-ম্যাট

1
এই সমাধানটি আমার পক্ষে কাজ করে না। আমি প্রশাসকের ব্যবহারকারীর অধীনে প্রোগ্রাম চালালেও আমি "প্রিভিলেজ হোল্ডড না" ব্যতিক্রম পাই।
ফান্ডা

@roomaroo এই পদ্ধতিটি কাজ করে না। এটি একটি ব্যতিক্রম ছোঁড়ে: পরিচালন ব্যতিক্রম, সুবিধাপ্রাপ্ত নয়।
কিছু কিছু

আপনি যদি জোর করে শাটডাউন করতে চান তবে আপনার mboShutdownParams ব্যবহার করা উচিত ["পতাকা"] = "5"; মান 5 মানে জোর করে শাটডাউন করা।
সানডেভোপার

32

এই থ্রেডটি প্রয়োজনীয় কোড সরবরাহ করে: http://bytes.com/forum/thread251367.html

তবে এখানে সম্পর্কিত কোডটি রয়েছে:

using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack=1)]
internal struct TokPriv1Luid
{
    public int Count;
    public long Luid;
    public int Attr;
}

[DllImport("kernel32.dll", ExactSpelling=true) ]
internal static extern IntPtr GetCurrentProcess();

[DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true) ]
internal static extern bool OpenProcessToken( IntPtr h, int acc, ref IntPtr
phtok );

[DllImport("advapi32.dll", SetLastError=true) ]
internal static extern bool LookupPrivilegeValue( string host, string name,
ref long pluid );

[DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true) ]
internal static extern bool AdjustTokenPrivileges( IntPtr htok, bool disall,
ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen );

[DllImport("user32.dll", ExactSpelling=true, SetLastError=true) ]
internal static extern bool ExitWindowsEx( int flg, int rea );

internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
internal const int TOKEN_QUERY = 0x00000008;
internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
internal const int EWX_LOGOFF = 0x00000000;
internal const int EWX_SHUTDOWN = 0x00000001;
internal const int EWX_REBOOT = 0x00000002;
internal const int EWX_FORCE = 0x00000004;
internal const int EWX_POWEROFF = 0x00000008;
internal const int EWX_FORCEIFHUNG = 0x00000010;

private void DoExitWin( int flg )
{
    bool ok;
    TokPriv1Luid tp;
    IntPtr hproc = GetCurrentProcess();
    IntPtr htok = IntPtr.Zero;
    ok = OpenProcessToken( hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok );
    tp.Count = 1;
    tp.Luid = 0;
    tp.Attr = SE_PRIVILEGE_ENABLED;
    ok = LookupPrivilegeValue( null, SE_SHUTDOWN_NAME, ref tp.Luid );
    ok = AdjustTokenPrivileges( htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero );
    ok = ExitWindowsEx( flg, 0 );
    }

ব্যবহার:

DoExitWin( EWX_SHUTDOWN );

অথবা

DoExitWin( EWX_REBOOT );

: আপনি কি অন্যান্য EWX_ contstants এখানে করতে সম্পর্কে পড়তে পারেন msdn.microsoft.com/en-us/library/windows/desktop/...
TripleAntigen

1
C # তে সংখ্যার ধ্রুবক পোর্ট করার সময়, একটি এনাম ব্যবহার করা ভাল অনুশীলন। এটি একটি এনাম করার জন্য তৈরি করা হয়েছে। এটি সংখ্যার ধ্রুবকের চারপাশে শক্তিশালী টাইপ দেয়, optionচ্ছিকভাবে পতাকা / বিটমাস্ক সমর্থন করে এবং সহজেই অন্তর্নিহিত সংখ্যার প্রকারে পিছনে পিছনে কাস্ট করে।
অ্যান্ড্রু রোনডাউ

26

বিভিন্ন পদ্ধতি:

উ: System.Diagnostics.Process.Start("Shutdown", "-s -t 10");

বি। উইন্ডোজ ম্যানেজমেন্ট ইনস্ট্রুমেন্টেশন (ডাব্লুএমআই)

সি। সিস্টেম.রুনটাইম.আইন্টার্ন সার্ভিস পিনভোক

D. সিস্টেম ম্যানেজমেন্ট

আমি জমা দেওয়ার পরে, আমি আরও অনেককে পোস্ট করে দেখেছি ...


2
বি এবং ডি একই পদ্ধতি (ডাব্লুএমআই)
লুকাস


14

পুরাতন স্কুল কুরুচিপূর্ণ পদ্ধতি। ExitWindowsExWin32 এপিআই থেকে ফাংশনটি ব্যবহার করুন ।

using System.Runtime.InteropServices;

void Shutdown2()
{
    const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
    const short SE_PRIVILEGE_ENABLED = 2;
    const uint EWX_SHUTDOWN = 1;
    const short TOKEN_ADJUST_PRIVILEGES = 32;
    const short TOKEN_QUERY = 8;
    IntPtr hToken;
    TOKEN_PRIVILEGES tkp;

    // Get shutdown privileges...
    OpenProcessToken(Process.GetCurrentProcess().Handle, 
          TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out hToken);
    tkp.PrivilegeCount = 1;
    tkp.Privileges.Attributes = SE_PRIVILEGE_ENABLED;
    LookupPrivilegeValue("", SE_SHUTDOWN_NAME, out tkp.Privileges.pLuid);
    AdjustTokenPrivileges(hToken, false, ref tkp, 0U, IntPtr.Zero, 
          IntPtr.Zero);

    // Now we have the privileges, shutdown Windows
    ExitWindowsEx(EWX_SHUTDOWN, 0);
}

// Structures needed for the API calls
private struct LUID
{
    public int LowPart;
    public int HighPart;
}
private struct LUID_AND_ATTRIBUTES
{
    public LUID pLuid;
    public int Attributes;
}
private struct TOKEN_PRIVILEGES
{
    public int PrivilegeCount;
    public LUID_AND_ATTRIBUTES Privileges;
}

[DllImport("advapi32.dll")]
static extern int OpenProcessToken(IntPtr ProcessHandle, 
                     int DesiredAccess, out IntPtr TokenHandle);

[DllImport("advapi32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool AdjustTokenPrivileges(IntPtr TokenHandle,
    [MarshalAs(UnmanagedType.Bool)]bool DisableAllPrivileges,
    ref TOKEN_PRIVILEGES NewState,
    UInt32 BufferLength,
    IntPtr PreviousState,
    IntPtr ReturnLength);

[DllImport("advapi32.dll")]
static extern int LookupPrivilegeValue(string lpSystemName, 
                       string lpName, out LUID lpLuid);

[DllImport("user32.dll", SetLastError = true)]
static extern int ExitWindowsEx(uint uFlags, uint dwReason);

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


12

স্বল্প ও মধুর. একটি বাহ্যিক প্রোগ্রাম কল করুন:

    using System.Diagnostics;

    void Shutdown()
    {
        Process.Start("shutdown.exe", "-s -t 00");
    }

দ্রষ্টব্য: এটি উইন্ডোজকে 'শাটডাউন.এক্সই প্রোগ্রাম' বলে ডাকে, সুতরাং যদি সেই প্রোগ্রামটি উপলব্ধ থাকে তবে এটি কাজ করবে। আপনার উইন্ডোজ 2000 (যেখানে শাটডাউন.এক্সই কেবলমাত্র রিসোর্স কিটে উপলব্ধ) বা এক্সপি এম্বেড থাকাতে আপনার সমস্যা হতে পারে ।


9
System.Diagnostics.Process.Start("shutdown", "/s /t 0")

কাজ করা উচিত.

পুনঃসূচনা করার জন্য, এটি / আর

এটি কোনও ডায়লগ সহ সরাসরি এবং পরিষ্কারভাবে পিসি বাক্স পুনরায় চালু করবে।


এটি আধুনিক (2015+) সিস্টেমে নির্ভুল উত্তর।
ফ্যাটি

ধন্যবাদ, আপনি / s এবং / টি 0 কী করবেন তা ব্যাখ্যা করতে পারেন?
ভ্লাদিমির ভার্জিল

1
পছন্দ করুন "/ S" যুক্তি কম্পিউটারকে শাটডাউন করতে বলে এবং "/ t" কম্পিউটারটিকে শাটডাউন করার আগে এক্স সেকেন্ড অপেক্ষা করতে বলে। আমি ব্যক্তিগত অভিজ্ঞতা থেকে জানি যে "/ t" যুক্তিটি উইন্ডোজ 8.1 তে কিছু করে না, তবে এটি নিশ্চিতভাবে 7 এ কাজ করে। আপনি এই ফাংশনগুলিও ব্যবহার করতে পারেন: shutdown /s /t 0 //For shutdown shutdown /r /t 0 //For restart shutdown /h /t 0 //For hibernateএকই ফলাফলের জন্য সেগুলি সিএমডি-তে টাইপ করার চেষ্টা করুন।
মিকাহ ভার্টাল

6

আপনি শাটডাউন প্রক্রিয়াটি চালু করতে পারেন:

  • shutdown -s -t 0 - শাটডাউন
  • shutdown -r -t 0 - আবার শুরু

6

দ্রষ্টব্য যে shutdown.exeচারপাশে কেবল একটি মোড়ক InitiateSystemShutdownEx, এটি অনুপস্থিত কিছু চমত্কার সরবরাহ করেExitWindowsEx


5

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

সমাধানটি প্রক্রিয়াটির জন্য নিজের জন্য বিশেষাধিকারের অনুরোধ জানানো হয়েছিল। রিচার্ড হিল নামে একটি লোকের লেখা http://www.dotnet247.com/247references/msgs/58/292150.aspx এ আমি উত্তরটি পেয়েছি ।

লিঙ্কটি পুরানো হওয়ার ক্ষেত্রে আমি নীচে তার সমাধানের আমার বেসিক ব্যবহারটি আটকেছি।

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Runtime.InteropServices;
using System.Security;
using System.Diagnostics;

namespace PowerControl
{
    public class PowerControl_Main
    {


        public void Shutdown()
        {
            ManagementBaseObject mboShutdown = null;
            ManagementClass mcWin32 = new ManagementClass("Win32_OperatingSystem");
            mcWin32.Get();

            if (!TokenAdjuster.EnablePrivilege("SeShutdownPrivilege", true))
            {
                Console.WriteLine("Could not enable SeShutdownPrivilege");
            }
            else
            {
                Console.WriteLine("Enabled SeShutdownPrivilege");
            }

            // You can't shutdown without security privileges
            mcWin32.Scope.Options.EnablePrivileges = true;
            ManagementBaseObject mboShutdownParams = mcWin32.GetMethodParameters("Win32Shutdown");

            // Flag 1 means we want to shut down the system
            mboShutdownParams["Flags"] = "1";
            mboShutdownParams["Reserved"] = "0";

            foreach (ManagementObject manObj in mcWin32.GetInstances())
            {
                try
                {
                    mboShutdown = manObj.InvokeMethod("Win32Shutdown",
                                                   mboShutdownParams, null);
                }
                catch (ManagementException mex)
                {
                    Console.WriteLine(mex.ToString());
                    Console.ReadKey();
                }
            }
        }


    }


    public sealed class TokenAdjuster
    {
        // PInvoke stuff required to set/enable security privileges
        [DllImport("advapi32", SetLastError = true),
        SuppressUnmanagedCodeSecurityAttribute]
        static extern int OpenProcessToken(
        System.IntPtr ProcessHandle, // handle to process
        int DesiredAccess, // desired access to process
        ref IntPtr TokenHandle // handle to open access token
        );

        [DllImport("kernel32", SetLastError = true),
        SuppressUnmanagedCodeSecurityAttribute]
        static extern bool CloseHandle(IntPtr handle);

        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern int AdjustTokenPrivileges(
        IntPtr TokenHandle,
        int DisableAllPrivileges,
        IntPtr NewState,
        int BufferLength,
        IntPtr PreviousState,
        ref int ReturnLength);

        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern bool LookupPrivilegeValue(
        string lpSystemName,
        string lpName,
        ref LUID lpLuid);

        [StructLayout(LayoutKind.Sequential)]
        internal struct LUID
        {
            internal int LowPart;
            internal int HighPart;
        }

        [StructLayout(LayoutKind.Sequential)]
        struct LUID_AND_ATTRIBUTES
        {
            LUID Luid;
            int Attributes;
        }

        [StructLayout(LayoutKind.Sequential)]
        struct _PRIVILEGE_SET
        {
            int PrivilegeCount;
            int Control;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] // ANYSIZE_ARRAY = 1
            LUID_AND_ATTRIBUTES[] Privileges;
        }

        [StructLayout(LayoutKind.Sequential)]
        internal struct TOKEN_PRIVILEGES
        {
            internal int PrivilegeCount;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            internal int[] Privileges;
        }
        const int SE_PRIVILEGE_ENABLED = 0x00000002;
        const int TOKEN_ADJUST_PRIVILEGES = 0X00000020;
        const int TOKEN_QUERY = 0X00000008;
        const int TOKEN_ALL_ACCESS = 0X001f01ff;
        const int PROCESS_QUERY_INFORMATION = 0X00000400;

        public static bool EnablePrivilege(string lpszPrivilege, bool
        bEnablePrivilege)
        {
            bool retval = false;
            int ltkpOld = 0;
            IntPtr hToken = IntPtr.Zero;
            TOKEN_PRIVILEGES tkp = new TOKEN_PRIVILEGES();
            tkp.Privileges = new int[3];
            TOKEN_PRIVILEGES tkpOld = new TOKEN_PRIVILEGES();
            tkpOld.Privileges = new int[3];
            LUID tLUID = new LUID();
            tkp.PrivilegeCount = 1;
            if (bEnablePrivilege)
                tkp.Privileges[2] = SE_PRIVILEGE_ENABLED;
            else
                tkp.Privileges[2] = 0;
            if (LookupPrivilegeValue(null, lpszPrivilege, ref tLUID))
            {
                Process proc = Process.GetCurrentProcess();
                if (proc.Handle != IntPtr.Zero)
                {
                    if (OpenProcessToken(proc.Handle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
                    ref hToken) != 0)
                    {
                        tkp.PrivilegeCount = 1;
                        tkp.Privileges[2] = SE_PRIVILEGE_ENABLED;
                        tkp.Privileges[1] = tLUID.HighPart;
                        tkp.Privileges[0] = tLUID.LowPart;
                        const int bufLength = 256;
                        IntPtr tu = Marshal.AllocHGlobal(bufLength);
                        Marshal.StructureToPtr(tkp, tu, true);
                        if (AdjustTokenPrivileges(hToken, 0, tu, bufLength, IntPtr.Zero, ref ltkpOld) != 0)
                        {
                            // successful AdjustTokenPrivileges doesn't mean privilege could be changed
                            if (Marshal.GetLastWin32Error() == 0)
                            {
                                retval = true; // Token changed
                            }
                        }
                        TOKEN_PRIVILEGES tokp = (TOKEN_PRIVILEGES)Marshal.PtrToStructure(tu,
                        typeof(TOKEN_PRIVILEGES));
                        Marshal.FreeHGlobal(tu);
                    }
                }
            }
            if (hToken != IntPtr.Zero)
            {
                CloseHandle(hToken);
            }
            return retval;
        }

    }
}

2
এটি কাজ করেছে, যদিও আমি তা কেন জানি না তা অপছন্দ করি। আমি সত্যিই ভাবছি যদি আমার "শাটডাউন" কমান্ডটি নিয়েই যাওয়া উচিত ছিল ...
ড্যান বেলিফ

5

পপ ক্যাটালিনের উত্তরে কেবল যুক্ত করতে এখানে একটি লাইন রয়েছে যা কোনও উইন্ডো প্রদর্শন না করে কম্পিউটার বন্ধ করে দেয়:

Process.Start(new ProcessStartInfo("shutdown", "/s /t 0") {
  CreateNoWindow = true, UseShellExecute = false
});

2

উইন্ডোজ 2003 সার্ভারটি বন্ধ করার জন্য আমি রুমোরোর ডাব্লুএমআই পদ্ধতিটি চেষ্টা করেছি , তবে প্রধান () ঘোষণায় `[STAThread] '(অর্থাৎ" একক থ্রেডেড অ্যাপার্টমেন্ট "থ্রেডিং মডেল) যোগ না করা পর্যন্ত এটি কার্যকর হবে না :

[STAThread]
public static void Main(string[] args) {
    Shutdown();
}

তারপরে আমি একটি থ্রেড থেকে শাটডাউন করার চেষ্টা করেছি এবং এটি কাজ করতে আমাকে থ্রেডের "অ্যাপার্টমেন্ট স্টেট "টি এসটিএতেও সেট করতে হয়েছিল:

using System.Management;
using System.Threading;

public static class Program {

    [STAThread]
    public static void Main(string[] args) {
        Thread t = new Thread(new ThreadStart(Program.Shutdown));
        t.SetApartmentState(ApartmentState.STA);
        t.Start();
        ...
    }

    public static void Shutdown() {
        // roomaroo's code
    }
}

আমি একটি সি # নূব, সুতরাং সিস্টেম বন্ধ করার ক্ষেত্রে আমি এসটিএ থ্রেডগুলির তাত্পর্য সম্পর্কে পুরোপুরি নিশ্চিত নই (এমনকি আমি উপরে পোস্ট করা লিঙ্কটি পড়েও)। সম্ভবত অন্য কেউ বিস্তারিত বলতে পারেন ...?


প্রকৃতপক্ষে, কেবলমাত্র থ্রেড যা ডাব্লুএমআইকে কল করে তাকে এসটিএ থ্রেড হওয়া দরকার। যদি এটি মূল থ্রেড না হয় তবে Main()এটির দরকার নেই [STAThread]
এসএলএক্স

2

** বিশদ উত্তর ...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
// Remember to add a reference to the System.Management assembly
using System.Management;
using System.Diagnostics;

namespace ShutDown
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnShutDown_Click(object sender, EventArgs e)
        {
            ManagementBaseObject mboShutdown = null;
            ManagementClass mcWin32 = new ManagementClass("Win32_OperatingSystem");
            mcWin32.Get();

            // You can't shutdown without security privileges
            mcWin32.Scope.Options.EnablePrivileges = true;
            ManagementBaseObject mboShutdownParams = mcWin32.GetMethodParameters("Win32Shutdown");

            // Flag 1 means we want to shut down the system
            mboShutdownParams["Flags"] = "1";
            mboShutdownParams["Reserved"] = "0";

            foreach (ManagementObject manObj in mcWin32.GetInstances())
            {
                mboShutdown = manObj.InvokeMethod("Win32Shutdown", mboShutdownParams, null);
            }
        }
    }
}

1

Shutdown.exe ব্যবহার করুন। উইন্ডোফর্মগুলি থেকে কার্যকর অর্গস, জটিল সম্পাদন, এক্সিকিউশন সমস্যাটি এড়াতে পাওয়ারশেল এক্সিকিউট করে স্ক্রিপ্ট ব্যবহার করে:

using System.Management.Automation;
...
using (PowerShell PowerShellInstance = PowerShell.Create())
{
    PowerShellInstance.AddScript("shutdown -a; shutdown -r -t 100;");
    // invoke execution on the pipeline (collecting output)
    Collection<PSObject> PSOutput = PowerShellInstance.Invoke();
} 

সিস্টেম.ম্যানেজমেন্ট.আউটমেশন.ডিল ওএস এ ইনস্টল করা উচিত এবং জিএসি তে উপলব্ধ।

আমার ইংরেজীর জন্য দুঃখিত.


0

কম্পিউটার বন্ধ করার জন্য কোনও নেট নেট পদ্ধতি নেই। আপনাকে প্রস্থান উইন্ডো বা প্রস্থান উইন্ডোজএক্স API কল কল / ইনভোক করতে হবে।


0

আপনি যদি কম্পিউটারকে দূর থেকে বন্ধ করতে চান তবে আপনি ব্যবহার করতে পারেন

Using System.Diagnostics;

যে কোনও বোতাম ক্লিক করুন

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