Bagaimana cara saya memaksa saya .NET aplikasi untuk menjalankan sebagai administrator?

Setelah saya program yang diinstal pada komputer klien, bagaimana saya memaksa saya program untuk menjalankan sebagai administrator pada Windows 7?

Mengomentari pertanyaan (4)
Larutan

Anda'll ingin memodifikasi nyata yang akan tertanam dalam program ini. Ini bekerja pada Visual Studio 2008 dan lebih tinggi: Project + Add New Item, pilih "Aplikasi File Manifest". Mengubah <requestedExecutionLevel> elemen ke:

Pengguna mendapatkan UAC prompt ketika mereka memulai program. Gunakan dengan bijak; kesabaran mereka bisa cepat aus.

Komentar (8)

Menambahkan requestedExecutionLevel elemen untuk anda yang nyata adalah hanya setengah pertempuran, anda harus ingat bahwa UAC dapat dimatikan. Jika itu adalah, anda harus melakukan cek cara lama sekolah dan memasang dialog kesalahan jika user bukan administrator
(call IsInRole(WindowsBuiltInRole.Administrator) pada thread anda's CurrentPrincipal).

Komentar (7)

Langkah-langkah rinci adalah sebagai berikut.

  1. Tambahkan aplikasi file manifest untuk solusi
  2. Mengubah pengaturan aplikasi untuk "app.mewujudkan"
  3. Update tag "requestedExecutionLevel" untuk requireAdministrator.

Perhatikan bahwa menggunakan kode ini anda harus mematikan pengaturan keamanan ClickOnce, untuk melakukan ini, masuk ke dalam Sifat -> Keamanan -> ClickOnce Keamanan

Komentar (0)

Saya menerapkan beberapa kode untuk melakukannya secara manual:

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;
}
Komentar (5)

Anda dapat menanamkan manifest file di file EXE, yang akan menyebabkan Windows (7 atau lebih tinggi) untuk selalu menjalankan program sebagai administrator.

Anda dapat menemukan rincian lebih lanjut di Langkah 6: Buat dan Cantumkan Aplikasi Manifest (UAC) (MSDN).

Komentar (0)

Ketika bekerja pada Visual Studio 2008, klik kanan pada Proyek -> Add New Item dan kemudian pilih Aplikasi Manifest File.

Dalam manifest file, anda akan menemukan tag requestedExecutionLevel, dan anda dapat mengatur tingkat ke tiga nilai:

<requestedExecutionLevel tingkat="asInvoker" uiAccess="salah" />

ATAU

<requestedExecutionLevel tingkat="requireAdministrator" uiAccess="salah" />

ATAU

<requestedExecutionLevel tingkat="highestAvailable" uiAccess="salah" />

Untuk mengatur aplikasi anda untuk menjalankan sebagai administrator, anda harus memilih satu tengah.

Komentar (1)

Sebagai per

anda akan ingin untuk menambahkan aplikasi terwujud jika anda don't sudah memiliki satu atau don't tahu bagaimana untuk menambahkan satu. Seperti beberapa proyek don't secara otomatis menambah terpisah file manifest, pertama pergi ke proyek properti, arahkan ke Aplikasi tab dan periksa untuk memastikan proyek anda tidak termasuk terwujud di bawah keran.

  • Selanjutnya, klik kanan proyek
  • Tambahkan Item baru
  • Terakhir, cari dan klik Aplikasi File Manifest
Komentar (0)

Di Visual Studio 2010 klik kanan nama proyek anda. Tekan "Lihat Pengaturan Windows", ini menghasilkan dan membuka sebuah file yang disebut "app.mewujudkan". Dalam file ini menggantikan "asInvoker" dengan "requireAdministrator" seperti yang dijelaskan di bagian berkomentar dalam file.

Komentar (1)

Cara lain untuk melakukan ini, dalam kode-satunya, adalah untuk mendeteksi jika proses ini berjalan sebagai admin seperti di jawaban oleh @NG.. Dan kemudian membuka aplikasi lagi dan menutup saat ini.

Saya menggunakan kode ini ketika sebuah aplikasi hanya membutuhkan hak admin ketika berjalan di bawah kondisi tertentu, seperti ketika menginstal sendiri sebagai layanan. Jadi itu doesn't perlu jalankan sebagai admin semua waktu seperti jawaban yang lain memaksa juga.

Perhatikan pada kode di bawah NeedsToRunAsAdmin adalah suatu metode yang mendeteksi jika dalam kondisi saat ini hak admin diperlukan. Jika ini kembali palsu kode tidak akan mengangkat sendiri. Ini adalah keuntungan utama dari pendekatan ini lebih dari yang lain.

Meskipun kode ini memiliki keuntungan yang disebutkan di atas, tidak perlu re-launch itu sendiri sebagai sebuah proses baru yang isn't selalu apa yang anda inginkan.

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);
}
Komentar (1)

Anda dapat membuat manifest menggunakan ClickOnce Pengaturan Keamanan, dan kemudian menonaktifkannya:

Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings

Setelah anda mengklik ini, file akan dibuat dalam Proyek's properties folder bernama app.nyata setelah ini dibuat, anda dapat hapus centang Enable ClickOnce Pengaturan Keamanan pilihan

Buka file tersebut dan ubah baris ini :

untuk:

Ini akan membuat program yang memerlukan hak administrator.

Komentar (1)

Ini adalah versi sederhana dari ini jawaban, di atas oleh @NG

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

Klik kanan executable anda, pergi ke Properties > Kompatibilitas dan memeriksa 'Jalankan program ini sebagai admin' kotak.

Jika anda ingin menjalankannya sebagai admin untuk semua pengguna, lakukan hal yang sama di 'mengubah pengaturan untuk semua pengguna'.

Komentar (7)