我如何检查(非进程)文件是否是管理员
How could I check if a (non process) file is administrator
简单的问题,但找不到任何有用的信息。我需要遍历文件并检查它们是否具有管理员权限。但请记住,文件不是 运行,所以我需要基本检查软件是否将 'run as administrator' 复选框设置为真或假。我猜这可能与属性有关。那么,我怎样才能做到这一点? (我不知道...)
编辑:我找到了另一种方法,我还没有测试过。要将文件作为进程启动,请立即(没有 Thread.Sleep 或任何操作)挂起新创建的进程的主线程。然后,一个进程比一个简单的文件更容易检查提升的权限,因为运行时是文件行为的实际 'real' 方式。
您可以使用以下方法。您可以根据需要定义变量。
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";
}
简单的问题,但找不到任何有用的信息。我需要遍历文件并检查它们是否具有管理员权限。但请记住,文件不是 运行,所以我需要基本检查软件是否将 'run as administrator' 复选框设置为真或假。我猜这可能与属性有关。那么,我怎样才能做到这一点? (我不知道...)
编辑:我找到了另一种方法,我还没有测试过。要将文件作为进程启动,请立即(没有 Thread.Sleep 或任何操作)挂起新创建的进程的主线程。然后,一个进程比一个简单的文件更容易检查提升的权限,因为运行时是文件行为的实际 'real' 方式。
您可以使用以下方法。您可以根据需要定义变量。
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";
}