Создавайте ярлыки программные сигналы от C # и установите свойство «Run As Administrator»

StackOverflow https://stackoverflow.com/questions/4036081

  •  26-09-2019
  •  | 
  •  

Вопрос

Я уже знаю, как создавать ярлыки программно из моих приложений C #, используя IWshRuntimeLibrary а также WshShellClass. Отказ Или я мог использовать IShellLink.

Теперь, если ПК пользователя работает Windows Vista или Windows 7, я хотел бы иметь возможность установить "Запустить от имени администратора" Свойство этого ярлыка программически.

Это возможно? Если так, как?

alt text

Это было полезно?

Решение

В то время как ответ Дуга является правильным решением этой проблемы, это не ответ на этот конкретный вопрос ...

Чтобы установить это свойство на .lnk, вам нужно использовать IsheelllinkDatalist COM интерфейс. Великий Раймонд Чен имеет C ++ образец кода в своем блоге за это

Другие советы

Вам нужно будет Создайте файл манифеста Для вашего приложения для того, чтобы получить его запросить в качестве привилегий администратора. Вот хороший учебник, который вы можете следовать.

Наслаждаться!

Этот пример находится в PowerShell, но это использует те же объекты и классы, что и C #.

Используйте следующий код, чтобы получить номер байта на Activtae:

# Find the missing admin byte (use this code, when changing the link):
$adminon = [System.IO.File]::ReadAllBytes($shortCutLocation)
$adminof = [System.IO.File]::ReadAllBytes($shortCutLocation)
for ($i = 0; $i -lt $adminon.Count; $i++) { 
    if ($adminon[$i] -ne $adminof[$i]) { 
        Write-Host Location: $i Value: $($adminon[$i])  
    } 
}

Я получил байт № 21, и его значение было 34. Так что это скрипт, который я пользователь:

# Turning on the byte of "Run as Admin"
$lnkBytes = [System.IO.File]::ReadAllBytes($shortCutLocation)
$lnkBytes[21] = 34
[System.IO.File]::WriteAllBytes($shortCutLocation, $lnkBytes)

С помощью этого метода вы можете создать ярлык, который «Run As Administrator» устанавливается:

    void CreateShortcut(string shortcutPath, string sourcePath, bool runAsAdmin, params string[] args)
    {
        var shortcut = new IWshShell_Class().CreateShortcut(shortcutPath) as IWshShortcut;
        shortcut.TargetPath = System.IO.Path.GetFullPath(sourcePath);
        shortcut.Arguments = "\"" + string.Join("\" \"", args) + "\"";
        shortcut.Save();

        if (runAsAdmin)
            using (var fs = new FileStream(shortcutPath, FileMode.Open, FileAccess.ReadWrite))
            {
                fs.Seek(21, SeekOrigin.Begin);
                fs.WriteByte(0x22);
            }
    }

Кредит за пробег в качестве раздела администратора принадлежит здесь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top