Создайте ярлыки программно из C # и установите свойство «Запуск от имени администратора» - PullRequest
3 голосов
/ 27 октября 2010

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

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

Возможно ли это?Если да, то как?

alt text

Ответы [ 4 ]

4 голосов
/ 27 октября 2010

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

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

3 голосов
/ 21 сентября 2014

Этот пример в 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)
3 голосов
/ 27 октября 2010

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

Наслаждайтесь!

0 голосов
/ 05 ноября 2018

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

    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);
            }
    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...