Erstellen von Verknüpfungen programmatisch von C # und Satz „Als Administrator ausführen“ Eigenschaft
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?
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