Jadi saya menulis aplikasi yang membutuhkan akses ke registri. Saya belum menyentuh pengaturan build apa pun, ingin membuatnya berfungsi sebelum saya menambahkan sentuhan lain, seperti deskripsi atau nama.
Tiba-tiba, saya mendapatkan kesalahan yang tidak kunjung hilang. ClickOnce does not support the request execution level 'requireAdministrator'.
Sekarang, saya belum menyentuh ClickOnce di aplikasi ini. Yang telah saya lakukan hanyalah menyertakan file manifes yang meminta izin ini.
Masalah saya sekarang adalah bahwa kesalahan ini tidak akan hilang, dan saya tidak dapat mengkompilasi program saya. Ada saran tentang apa yang harus dilakukan? (Catatan tambahan: Saya akan pergi tidur, jadi saya akan memeriksanya besok siang).
95
requireAdministrator
izin yang meminta manifes dan ClickOnce mulai mengeluh bahwa itu tidak mendukungrequireAdministrator
. Masalahnya harus sangat jelas. ClickOnce melihat kebutuhan akan elevasi di manifes Anda (yang menjadi bagian dari aplikasi Anda). Saya tidak yakin apa lagi yang Anda butuhkan di sini ...Jawaban:
Sunting: Komentar ini memberikan jawaban yang bagus juga.
Asli:
Ternyata di bawah tab Security, "Enable ClickOnce security settings" dicentang. Meskipun saya tidak memeriksanya. Bagaimanapun, menghapus centang yang menghentikan ClickOnce memberi saya kesalahan. Butuh beberapa saat untuk menemukan ...
sumber
AppData
foldernya. Elevasi hak istimewa akan menyebabkan peralihan konteks pengguna di mana aplikasi ClickOnce bahkan tidak diinstal.Saya tahu ini pertanyaan lama tetapi saya datang ke sini dua tahun kemudian jadi:
Anda dapat menonaktifkan ClicKOnce dari tab Keamanan di properti proyek untuk membantu masalah tersebut; Lihat di bawah:
sumber
Jika Anda pernah menggunakan wizard penerbitan, atau 'Publikasikan Sekarang', kotak centang klik sekali dipilih secara otomatis ...
sumber
Saya tahu ini sudah tua tetapi saya sengaja menemukannya untuk mencari jawaban. Dalam kasus saya, saya menggunakan fungsi terbitkan dan saya harus tetap menggunakannya. Saya juga membutuhkan akses ke kemampuan admin. Jadi karena alasan itu, tidak ada jawaban di atas yang berhasil untuk saya.
Saya akhirnya menambahkan metode ke awal aplikasi saya yang memeriksa apakah itu dijalankan sebagai administrator dan jika tidak, luncurkan kembali sendiri sebagai admin. Untuk melakukan ini, Anda perlu menambahkan referensi berikut.
using System; using System.Diagnostics; using System.Reflection; using System.Security.Principal;
Kemudian Anda harus meletakkan ini di suatu tempat yang dapat diakses oleh metode utama Anda. Saya menggunakan WPF jadi saya menambahkannya ke MainWindow.xaml.cs tetapi Anda dapat menambahkannya di mana saja di awal kode Anda. Ingatlah untuk menambahkan "statis" ke metode ini jika Anda membutuhkannya.
private void AdminRelauncher() { if (!IsRunAsAdmin()) { ProcessStartInfo proc = new ProcessStartInfo(); proc.UseShellExecute = true; proc.WorkingDirectory = Environment.CurrentDirectory; proc.FileName = Assembly.GetEntryAssembly().CodeBase; proc.Verb = "runas"; try { Process.Start(proc); Application.Current.Shutdown(); } catch(Exception ex) { Console.WriteLine("This program must be run as an administrator! \n\n" + ex.ToString()); } } } private bool IsRunAsAdmin() { try { WindowsIdentity id = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(id); return principal.IsInRole(WindowsBuiltInRole.Administrator); } catch (Exception) { return false; } }
Terakhir, di awal program Anda, tambahkan referensi ke metode tersebut. Dalam kasus saya, saya menambahkannya ke MainWindow tetapi menambahkannya ke pekerjaan Utama juga.
public MainWindow() { InitializeComponent(); AdminRelauncher(); //This is the only important line here, add it to a place it gets run early on. }
Semoga ini membantu!
sumber
Tindakan ini dapat dilakukan dengan memilih "Aktifkan pengaturan keamanan ClickOnce" (karena tidak dapat "tidak dicentang" selama Publikasikan, seperti yang dinyatakan) dan kemudian dengan memilih "Ini adalah aplikasi kepercayaan parsial". "Intranet Lokal" akan secara otomatis dipilih di menu drop-down yang sangat bagus.
Simpan perubahan Anda, Publikasikan aplikasi, selesai-ski. :-)
sumber
Lihatlah di file app.Manifest Anda dan Anda akan melihat ini:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Ada petunjuk di sana di komentar, tetapi hanya menghapus "requireAdministrator" dan memasukkan ini di tempatnya memecahkan masalah bagi saya:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
sumber
requireAdministrator
hak istimewa diperlukan untuk menulis ke registri, jadi ini akan menjadi persyaratan.asInvoke
Saya memiliki masalah yang sama saya menyelesaikannya dengan menghapus centang pada " Aktifkan pengaturan keamanan ClickOnce" Untuk Menemukan opsi ini di Visual Studio Klik Kanan pada Proyek Anda ==> properti ==> Pilih Keamanan ==> Aktifkan pengaturan keamanan ClickOnce (Opsi ini adalah sudah diperiksa jadi saya hapus centangnya dan masalah saya teratasi).
sumber
Berikut adalah potongan kode untuk VB.NET
If Not New WindowsPrincipal(WindowsIdentity.GetCurrent).IsInRole(WindowsBuiltInRole.Administrator) Then Process.Start(New ProcessStartInfo With { _ .UseShellExecute = True, _ .WorkingDirectory = Environment.CurrentDirectory, _ .FileName = Assembly.GetEntryAssembly.CodeBase, _ .Verb = "runas"})
EDIT: Tetapi jika Anda menerapkan dengan cara ini, beberapa AV-Software memblokir kode Anda.
sumber
Bagi mereka yang menggunakan hapus centang "Aktifkan pengaturan keamanan ClickOnce" tidak dapat bekerja, untuk mencoba metode yang saya temukan.
Pertama, biarkan item app.manifest requestExecutionLevel Anda seperti ini:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
Dan kemudian Anda mengedit file Program.cs Anda seperti ini:
using System; using System.Diagnostics; using System.Reflection; using System.Security.Principal; using System.Windows.Forms;
merestrukturisasi metode utama seperti:
static void Main() { var wi = WindowsIdentity.GetCurrent(); var wp = new WindowsPrincipal(wi); bool runAsAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator); if (!runAsAdmin) { // It is not possible to launch a ClickOnce app as administrator directly, // so instead we launch the app as administrator in a new process. var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase); // The following properties run the new process as administrator processInfo.UseShellExecute = true; processInfo.Verb = "runas"; // Start the new process try { Process.Start(processInfo); } catch (Exception) { // The user did not allow the application to run as administrator MessageBox.Show("Sorry, but I don't seem to be able to start " + "this program with administrator rights!"); } // Shut down the current process Application.Exit(); } else { // We are running as administrator Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } }
Ini berfungsi pada Windows 10 dan Visual Studio 2019!
sumber
Bagi siapa pun yang mengalami ini, saya pikir saya akan berkontribusi apa yang akhirnya berhasil untuk saya.
Ya, opsi 'Enable ClickOnce security settings' secara otomatis diperiksa ulang, jika Anda tidak mencentangnya, saat Anda melakukan Build> Publish .
Bagi saya, saya tidak perlu 'Publikasikan' - ini adalah .exe sederhana dan portabel yang membuat Tugas Terjadwal untuk pengguna saya dan saya perlu memastikannya meningkat, bahkan saat masuk sebagai Administrator.
Jadi saya baru saja mengambil .exe terbaru saya dari \ bin \ Release dan itulah yang diterapkan di sistem klien saya.
Bekerja seperti yang diharapkan - yaitu ketika saya meletakkannya di sistem dengan UAC diaktifkan / pada pengaturan tertingginya, .exe memiliki 'perisai' di atasnya, dan ketika saya menjalankannya, bahkan ketika masuk sebagai Administrator, itu mengangkat dan saya mendapatkan prompt UAC.
Aplikasi penjadwal tugas kecil saya sekarang dapat membuat tugas tanpa mendapatkan kesalahan 'Access Denied' (yang sebelumnya, hanya dapat diselesaikan dengan mengklik kanan .exe dan mengklik Run as Administrator).
sumber
hanya
dan U tidak akan mendapatkan error dan aplikasi Anda akan dijalankan sebagai admin
sumber