İyi akşamlar MH ailesi bugün sizlere C# ile kodladığınız bir programı ClickOnce ile bile nasıl UAC (yönetici modunda) çalıştırabileceğinizi anlatacağım ve konu sonuna örnek source ile birlikte kendi yaptığım programı koyacağım.
Properties kısmı ile ilgili olayı yaptığınızı varsayıyorum yapmadıysanız eğer ;
- Projeye sağ tıklayıp properties seçeneğine basın
- Security sekmesine gelin
- "Enable ClickOnce... adlı seçeneğe tik koyun
- Properties kısmının altında "app.manifest" xml dosyası gelecektir
- "<requestedExecutionLevel level="asInvoker" uiAccess="false" />" kısmını
- "<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />" ile değiştirin.
C# ile Windows App bir proje açtığınızı varsayıyorum
Ardından desing kısmına çift tıklayarak kod kısmına geçelim (projeye çift tıklamanız yeterli)
Şimdi kullanacağımız kodlar için bir kaç kütüphane eklememiz lazım ;
C#:
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
using System.Windows;
bunları yazdıktan sonra şu kodları globale yazmamız gerekiyor (elle yazmayı tavsiye ederim, öğrenim açısından)
C#:
private void Yoneticizni()
{
if (!Yoneticiznikontrol())
{
ProcessStartInfo program = new ProcessStartInfo();
program.UseShellExecute = true;
program.WorkingDirectory = Environment.CurrentDirectory;
program.FileName = Assembly.GetEntryAssembly().CodeBase;
program.Verb = "runas";
try
{
Process.Start(program);
Environment.Exit(0);
}
catch (Exception)
{
cevap=MessageBox.Show("Program yönetici izni olmadan düzgün çalışmayacaktır!\n yinede çalıştırmak istiyor musunuz ? ","YÖNETİCİ İZNİ",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);
if (cevap==DialogResult.No)
{
Environment.Exit(0);
}
else
{
}
}
}
}
(Kendinize göre editleyebilirsiniz ("runas" kısmı hariç))
Ardından tekrar globale ;
C#:
DialogResult cevap;
private bool Yoneticiznikontrol()
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
Kodunu ekliyoruz.
İşlem tamamdır, son olarak "InitializeComponent();" komutunun hemen altına
C#:
Yoneticizni();
Komutunu ekliyoruz.
İşlem tamamlandı programı "Start" ile çalıştıramazsanız direk exe' den deneyebilirsiniz. sorunsuz çalışacaktır.
Bütün her şey bittikten sonra ki source ;
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
using System.Windows;
using System.Windows.Input;
namespace WindowsFormsApp26
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Yoneticizni();
}
private void Yoneticizni()
{
if (!Yoneticiznikontrol())
{
ProcessStartInfo program = new ProcessStartInfo();
program.UseShellExecute = true;
program.WorkingDirectory = Environment.CurrentDirectory;
program.FileName = Assembly.GetEntryAssembly().CodeBase;
program.Verb = "runas";
try
{
Process.Start(program);
Environment.Exit(0);
}
catch (Exception)
{
cevap=MessageBox.Show("Program yönetici izni olmadan düzgün çalışmayacaktır!\n yinede çalıştırmak istiyor musunuz ? ","YÖNETİCİ İZNİ",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);
if (cevap==DialogResult.No)
{
Environment.Exit(0);
}
else
{
}
}
}
}
DialogResult cevap;
private bool Yoneticiznikontrol()
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}