Erstellen von Verknüpfungen programmatisch von C # und Satz „Als Administrator ausführen“ Eigenschaft

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

  •  26-09-2019
  •  | 
  •  

Frage

Ich weiß schon, wie Verknüpfungen erstellen programmatisch aus meinem C # -Anwendungen mit IWshRuntimeLibrary und WshShellClass. Oder ich könnte IShellLink verwenden.

Nun, wenn der PC des Benutzers ausgeführt wird, Windows Vista oder Windows 7, ich mochte in der Lage sein, die , um „Als Administrator ausführen“ Eigenschaft dieser Verknüpfung programmactically auch.

Ist das möglich? Wenn ja, wie?

alt text

War es hilfreich?

Lösung

Während Doug Antwort die richtige Lösung für dieses Problem ist, es ist nicht die Antwort auf diese spezielle Frage ...

Um diese Eigenschaft auf einem LNK eingestellt haben, müssen Sie die IShellLinkDataList COM-Schnittstelle. Die große Raymond Chen hat c ++ Beispielcode auf seinem Blog für das

Andere Tipps

Sie benötigen erstellen eine Manifest-Datei für Ihre Anwendung, um es auf Anfrage Lauf als Administrator Privilegien zu erhalten. Hier ist ein schönes Tutorial folgen kann.

Genießen Sie!

Dieses Beispiel ist in Powershell, sondern verwendet die gleichen Objekte und Klassen, wie C #.

Verwenden Sie den folgenden Code, um die Byte-Zahl zu activtae zu bekommen:

# 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])  
    } 
}

habe ich Byte-Nummer 21 und sein Wert betrug 34. Das ist also das Skript I Benutzer:

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

Mit dieser Methode können Sie eine Verknüpfung erstellen, dass „Als Administrator ausführen“ Eigenschaft festgelegt ist:

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

Kredit für Lauf als Admin-Bereich gehört hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top