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

本文关键字:文件 是否 管理员 进程 检查 何检查 | 更新日期: 2023-09-27 18:12:42

简单的问题,但找不到任何有用的。我需要遍历文件并检查它们是否具有管理员权限。但请记住,文件没有运行,所以我需要检查软件是否有一个"以管理员身份运行"复选框设置为真或假。我想这可能与属性有关。那么,我怎么才能做到呢?(我不知道…)

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

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

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

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