我的 VBScript 文件:
If Not WScript.Arguments.Named.Exists("elevate") Then
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute(WScript.FullName, WScript.ScriptFullName & " /elevate", "", "runas", 0)
WScript.Quit 2
WScript.Echo("Done 1")
Else
我需要一种方法来确定用户是否单击了 NO 然后将错误代码返回到批处理文件。 ShellExecute 是否返回任何错误代码或其他内容?
问题是返回给 bat 的错误代码始终相同(在本例中为 2),无论我单击是还是否。
编辑:
Dim objShell, objWMIService, servSpooler, objReg, objShellApp, result, oShell
Dim whoami, strWhoamiOutput, whoamiOutput
Const PrinterPort = "NUL:"
Const HKLM = &h80000002
If Not WScript.Arguments.Named.Exists("elevate") Then
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute WScript.FullName, WScript.ScriptFullName & " /elevate", "", "runas", 0
WScript.Quit 10
WScript.Echo("Done 1")
Else
Set oShell = CreateObject("WScript.Shell")
Set whoami = oShell.Exec("whoami /groups")
Set whoamiOutput = whoami.StdOut
strWhoamiOutput = whoamiOutput.ReadAll
If InStr(1, strWhoamiOutput, "S-1-16-12288", vbTextCompare) Then
Wscript.Echo("ADMIN")
WScript.Echo("Port")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
set servSpooler = objWMIService.Get("Win32_Service.Name='spooler'")
Set objReg = GetObject("winmgmts:root\default:StdRegProv")
servSpooler.StopService
objReg.SetStringValue HKLM, "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports", PrinterPort, ""
servSpooler.StartService
WScript.Quit 1
End if
WScript.Echo("Done 2")
End If
WScript.Quit 2
WScript.Echo("Done 3")
在获得提升权限后,它只会返回第一个 WScript.Quit 的错误代码。无论我单击否或是。当我单击是时,它按预期运行程序,并且在启动后台处理程序后它确实退出了,但返回到批处理的错误代码仍然是第一个 Wscript.Quit 的错误代码,而不是后台处理程序之后的错误代码。
我希望它运行如下:
编辑:
If Not WScript.Arguments.Named.Exists("elevate") Then
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute WScript.FullName, WScript.ScriptFullName & " /elevate", "", "runas", 0
WScript.Quit 10
WScript.Echo("Done 1")
Else
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("testfile.txt", True)
MyFile.WriteLine("This is a test.")
MyFile.Close
End If
WScript.Quit 2
WScript.Echo("Done 3")
当我从 .../System32 运行它时,它让我在单击是时创建一个文件。尽管如此,错误代码始终相同,无论我单击是还是否。
最佳答案
尝试在 c:\windows\system32 中创建一个文件并测试错误代码。
只有标记为 RequireAdmin 的程序在执行时会失败。其他一切都将以受限用户的身份开始。
对于你的方法。
返回值
No return value.
WScript 有两个执行方法。两者都有不同的功能,所以请阅读文档。
object.Exec(strCommand)
Exec 方法返回一个 WshScriptExec 对象,该对象提供有关使用 Exec 运行的脚本以及对 StdIn、StdOut 和 StdErr channel 的访问的状态和错误信息。
object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
等待返回
可选的。 bool 值,指示脚本在继续执行脚本中的下一条语句之前是否应等待程序完成执行。如果设置为 true,脚本执行将暂停,直到程序完成,并且 Run 返回程序返回的任何错误代码。如果设置为 false(默认),Run 方法在启动程序后立即返回,自动返回 0(不会被解释为错误代码)。
关于batch-file - 确定用户是否在 UAC 提示中单击了 NO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23778791/