如何检查(非进程)文件是否为管理员

时间:2016-10-12 18:09:44

标签: c# security file-permissions administrator

简单的问题,但无法找到任何有用的东西。我需要遍历文件并检查他们是否具有管理员权限。但请记住,该文件没有运行,因此我需要基本检查软件是否以管理员身份运行。复选框设置为true或false。可能这与我猜的属性有关。那么,我怎么能实现呢? (我不知道......)

编辑:我找到了另一种方法,我还没有测试它。要将文件作为进程启动,请立即(不使用Thread.Sleep或任何操作)挂起新创建的进程'主线程。然后,一个进程比一个简单的文件更容易检查提升的权限,因为运行时是实际的'真实的'文件的行为方式。

1 个答案:

答案 0 :(得分:1)

您可以使用以下方法。您可以根据您的要求定义变量。

string sShortcutPath="";
        string sAppName="";
        string sDesktopPath="";
        string vbScript = GENERICVBFILE.Replace("@@SHORTCUTPATH@@", sShortcutPath);
        vbScript = vbScript.Replace("@@SHORTCUTNAME@@", sAppName);
        vbScript = vbScript.Replace("@@DESKTOPFOLDER@@", sDesktopPath);
        string vbFile = "Script.vbs";
        if (File.Exists(vbFile))
            File.Delete(vbFile);
        File.WriteAllText(vbFile, vbScript);
        Process cProc = new Process();
        cProc.StartInfo.FileName = "cscript.exe";
        cProc.StartInfo.Arguments = vbFile;
        cProc.StartInfo.UseShellExecute = false;
        cProc.StartInfo.CreateNoWindow = true;
        cProc.Start();


    public const string GENERICVBFILE =
        "Option Explicit\n" +
        "Dim ShellApp, FSO, Desktop\n" +
        "Set ShellApp = CreateObject(\"Shell.Application\")\n" +
        "Set FSO = CreateObject(\"Scripting.FileSystemObject\")\n" +

        "Set Desktop =  ShellApp.NameSpace(\"@@DESKTOPFOLDER@@\")\n" +
        "Dim LnkFile\n" +
        "LnkFile = \"@@SHORTCUTPATH@@\"\n" +

        "If(FSO.FileExists(LnkFile)) Then\n" +
        "Dim verb\n" +
        "Dim desktopImtes, item\n" +
        "Set desktopImtes = Desktop.Items()\n" +

        "For Each item in desktopImtes\n" +
        "If (item.Name = \"@@SHORTCUTNAME@@\") Then\n" +
        "For Each verb in item.Verbs\n" +
        "If (verb.Name = \"Run as &administrator\") _\n" +
        "Then\n" +
        "verb.DoIt\n" +
        "End If\n" +
        "Next\n" +
        "End If\n" +
        "Next\n" +
        "End If";
}