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

C# 如何检查(非进程)文件是否为管理员,c#,security,file-permissions,administrator,C#,Security,File Permissions,Administrator,简单的问题,但找不到任何有用的东西。我需要遍历文件并检查它们是否具有管理员权限。但请记住,文件没有运行,因此我需要基本检查软件是否已将“以管理员身份运行”复选框设置为true或false。我想这可能与属性有关。那么,我怎样才能做到这一点呢?我不知道 编辑:我找到了另一种方法,我还没有测试它。将文件作为进程启动,立即不使用线程。睡眠或任何操作将挂起新创建的进程的主线程。然后,进程比简单文件更容易检查提升的权限,因为运行时是文件的实际“真实”行为方式 您可以使用以下方法。您可以根据需要定义变量 st

简单的问题,但找不到任何有用的东西。我需要遍历文件并检查它们是否具有管理员权限。但请记住,文件没有运行,因此我需要基本检查软件是否已将“以管理员身份运行”复选框设置为true或false。我想这可能与属性有关。那么,我怎样才能做到这一点呢?我不知道


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

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

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

15秒的谷歌搜索:有多种方式可以配置一个进程以提升权限执行,包括进程本身。如果您只想知道Windows Shell快捷方式中复选框的状态,则需要查找专门讨论该问题的主题。你的问题不清楚你的实际目标是什么,也就是说,你为什么关心这个环境?但你的问题太宽泛了。一些相关的帖子包括,,,,和好的。。。你们写的太多了,和我的实际问题有很大的不同。。。让我直说吧。。。投反对票没关系,但先考虑一下。我在C编写了杀毒软件,没有实时保护,没有C++。作为一个小启发,我需要知道文件属性的状态,关于管理员设置。好的。。。实际上我不是vbscript专家,但是。。。您提供了一个创建vbscript的代码,脚本本身会检查指定文件是否为管理员。一些小问题。。。我检查的每个文件,如果每次都启动一个vbscript文件不是有点贵吗。。。其次,c软件如何与vbscript文件通信。这可能需要复杂的客户机-服务器通信。但无论如何,谢谢你的努力。你也可以搜索NSIS脚本,它在这种情况下也非常有用。请你发布原始代码,这将使我的工作更容易,因为我可能可以直接从dll使用它。