قم بإنشاء اختصارات برمجيًا من خاصية C# وقم بتعيين خاصية "Run as Administrator"

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

  •  26-09-2019
  •  | 
  •  

سؤال

أعرف بالفعل كيفية إنشاء اختصارات برمجيًا من تطبيقات C# الخاصة بي IWshRuntimeLibrary و WshShellClass. أو يمكنني استخدام IShellLink.

الآن ، إذا كان جهاز الكمبيوتر الخاص بالمستخدم يعمل على تشغيل Windows Vista أو Windows 7 ، أود أن أكون قادرًا على ضبط ملف "تشغيل كمسؤول" خاصية هذا الاختصار برمجيا كذلك.

هل هذا ممكن؟ إذا كان الأمر كذلك ، كيف؟

alt text

هل كانت مفيدة؟

المحلول

على الرغم من أن إجابة دوغ هي الحل الصحيح لهذه المشكلة ، إلا أنها ليست الإجابة على هذا السؤال المحدد ...

لتعيين تلك الخاصية على .lnk ، تحتاج إلى استخدام Ishelllinkdatalist com واجهة. ريمون تشن العظيم لديه C ++ نموذج رمز على مدونته لهذا

نصائح أخرى

سوف تحتاج إلى إنشاء ملف واضح لتطبيقك من أجل الحصول على طلب تشغيل كامتيازات المسؤول. إليك برنامج تعليمي جميل يمكنك متابعته.

يتمتع!

هذا المثال في PowerShell ، ولكنه يستخدم نفس الكائنات والفئات مثل C#.

استخدم الكود التالي للحصول على رقم البايت إلى ActiveTae:

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

باستخدام هذه الطريقة ، يمكنك إنشاء اختصار يتم تعيين خاصية "تشغيل كمسؤول":

    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