Yanlızca bir kere yönetici izni aldıktan sonra bir daha yönetici izni sormadan yönetici izni almayı göstereceğim.
Görev zamanlayıcısında yönetici izni olmadan görev çalıştırıp, bu görevi yönetici yapabiliyorduk. (bkz.) Bu işlemden faydalanarak biz de kendi kendimize yönetici verebilmek adına, yönetici izni yoksa kendi görevimizi tekrardan başlatacak görevi yapacağız. Yeni sayfa açmak istemediğimden bu sayfa üzerinde paylaşım yaptım. Yoksa neden böyle bir şey öğretilsin ki?
C# Projemizi oluşturuyoruz. Ben size göstermek amaçlı .NET 4.8.1 Console App açtım.
Nugetlardan TaskSchuduler'ı indiriyoruz.
Bu kodda da tam olarak bu mantık işliyor. Siz kendinize göre özelleştirip, optimize edersiniz.
Artık uygulamamızı çalıştırdığımızda kendine yönetici izni veriyor.
İsterseniz masaüstüne sağ tık -> Kısayol oluştur ->
Bu kısayolu çalıştırırsanız, direkt yönetici izinsiz çalışmadan yönetici olarak çalışır.
İyi günler ve iyi çalışmalar dilerim!
Görev zamanlayıcısında yönetici izni olmadan görev çalıştırıp, bu görevi yönetici yapabiliyorduk. (bkz.) Bu işlemden faydalanarak biz de kendi kendimize yönetici verebilmek adına, yönetici izni yoksa kendi görevimizi tekrardan başlatacak görevi yapacağız. Yeni sayfa açmak istemediğimden bu sayfa üzerinde paylaşım yaptım. Yoksa neden böyle bir şey öğretilsin ki?
C# Projemizi oluşturuyoruz. Ben size göstermek amaçlı .NET 4.8.1 Console App açtım.
Nugetlardan TaskSchuduler'ı indiriyoruz.
C#:
using System.Runtime.InteropServices;
using Microsoft.Win32.TaskScheduler;
using System.Security.Principal;
using System.Linq;
using System.IO;
using System;
namespace KendiKendineUAC
{
internal class Program
{
private static string appPath = AppDomain.CurrentDomain.BaseDirectory,
taskPath = @"Microsoft\Windows\Windoc";
static void Main(string[] _)
{
using (TaskService ts = new TaskService())
{
Task task = ts.GetTask($@"{taskPath}\Opens\KendiKendineUAC");
if (IsRunningAsAdministrator())
{
Console.Write("Yönetici izni alındı");
try
{
if (task == null)
{
if (ts.GetFolder(taskPath) == null)
ts.RootFolder.CreateFolder(taskPath);
taskPath += @"\Opens";
if (ts.GetFolder(taskPath) == null)
{
TaskFolder taskFolder = ts.RootFolder.CreateFolder(taskPath);
TaskDefinition taskDefinition = ts.NewTask();
taskDefinition.RegistrationInfo.Description = "KendiKendineUAC";
taskDefinition.RegistrationInfo.Author = "Reis Production";
taskDefinition.Actions.Add(new ExecAction(Path.Combine(appPath, "KendiKendineUAC.exe"), null /*Args*/, appPath));
// Eğer başlangıçta otomatik açılmasını istiyorsanız bu bölümü açıklama satırından kaldırın
// Tetikleyici eklemek için:
//LogonTrigger logonTrigger = new LogonTrigger();
//taskDefinition.Triggers.Add(logonTrigger);
taskDefinition.Principal.UserId = Environment.UserName;
taskDefinition.Principal.RunLevel = TaskRunLevel.Highest;
taskFolder.RegisterTaskDefinition("KendiKendineUAC", taskDefinition);
}
}
else // Görev var ama ayarları kurcalanmış ise düzeltmek için
{
ExecAction execAction = task.Definition.Actions.OfType<ExecAction>().FirstOrDefault();
if (execAction != null
&& !string.IsNullOrWhiteSpace(appPath)
&& !string.IsNullOrWhiteSpace(Path.GetDirectoryName(execAction.Path))
&& !Path.GetDirectoryName(execAction.Path).Equals(appPath, StringComparison.OrdinalIgnoreCase))
{
execAction.Path = Path.Combine(appPath, "KendiKendineUAC.exe");
ts.RootFolder.RegisterTaskDefinition("KendiKendineUAC", task.Definition);
}
}
}
catch (COMException exception) when (exception.HResult == unchecked((int)0x800700B7))
{ /* Görev zaten var işleme devam et */ }
catch (Exception exception)
{
// Hata kontrolü
// Örneğin:
Console.Write(exception.Message);
}
}
else
{
Console.Write("Yönetici izni yok");
task?.Run();
System.Threading.Thread.Sleep(9999);
return;
}
Console.ReadLine();
}
bool IsRunningAsAdministrator()
{
using (WindowsIdentity identity = WindowsIdentity.GetCurrent())
{
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
}
}
}
}
Artık uygulamamızı çalıştırdığımızda kendine yönetici izni veriyor.
İsterseniz masaüstüne sağ tık -> Kısayol oluştur ->
C:\Windows\System32\schtasks.exe /run /tn "Microsoft\Windows\Windoc\Opens\KendiKendineUAC"
Bu kısayolu çalıştırırsanız, direkt yönetici izinsiz çalışmadan yönetici olarak çalışır.
İyi günler ve iyi çalışmalar dilerim!