我有一个使用cscript.exe
. 它在桌面(和开始菜单)上创建一个快捷方式,该快捷方式cscript.exe
使用参数运行以运行另一个 JScript 脚本。在相关部分,它看起来像这样:
function create_shortcut_at(folder, target_script_folder)
{
var shell = new ActiveXObject("WScript.Shell");
var shortcut = shell.CreateShortcut(folder + "\\Run The Script.lnk");
shortcut.TargetPath = "cscript";
shortcut.Arguments = "\""+target_script_folder+"\\script.js\" /aParam /orTwo";
shortcut.IconLocation = target_script_folder+"\\icon.ico";
shortcut.Save();
}
它被称为create_shortcut_at(desktop_folder, script_folder)
.
就目前而言,这很有效。它创建桌面图标,正确指向脚本并在双击时运行它。问题是它确实需要“以管理员身份”运行脚本。
而且该脚本确实需要“以管理员身份”运行——它安装应用程序(适用于所有用户)并重新启动计算机。(对于那些感兴趣的人,脚本是 wpkg.js。将其修改为自我提升是不可取的。)
由于快捷方式的目标实际上是“cscript.exe”,因此我不能使用清单进行升级。从理论上讲,我可能可以在 windows 目录中安装一个 cscript.exe.manifest,但即使这样可行,由于显而易见的原因,这将是一个糟糕的主意。
我也不想使用虚拟脚本,因为这是要处理的额外文件,而且手头还有另一个看似合理的解决方案:选中快捷方式上的“以管理员身份运行”框。
30 秒的调查表明 WScript.Shell ActiveX 对象没有为此所需的接口。其他调查表明 IShellLinkDataList 确实如此。但是,IShellLinkDataList 是一个通用的 COM 接口。我在互联网上看到了几个例子,大多数链接在这里。但是,所有示例都是在编译后的代码(C++、C#,甚至 JScript.NET)中完成的。我非常喜欢能够直接在 JScript 中执行此操作,从cscript.exe
.
也就是说,我完全赞成我没有考虑过的想法或其他解决方案。