如何确定VBScript是否在RDP控制台中运行?

如何确定VBScript是否在RDP控制台中运行?,vbscript,wmi,Vbscript,Wmi,我的MSI安装程序在远程桌面上运行时会失败。(除非它使用/admin或/console选项运行,以便获得会话0) 我想使用VBScript自定义操作来确定我是否作为会话0运行。我了解到,我可以使用两个WMI调用来确定这一点: GetCurrentProcessID() ProcessIdToSessionId() 但是,我不知道如何在VBScript中调用这些东西。还有想法 Set oShell = CreateObject("WScript.Shell") connection = oSh

我的MSI安装程序在远程桌面上运行时会失败。(除非它使用/admin或/console选项运行,以便获得会话0)

我想使用VBScript自定义操作来确定我是否作为会话0运行。我了解到,我可以使用两个WMI调用来确定这一点:

  • GetCurrentProcessID()
  • ProcessIdToSessionId()
但是,我不知道如何在VBScript中调用这些东西。还有想法

Set oShell = CreateObject("WScript.Shell")
connection = oShell.ExpandEnvironmentStrings("%SESSIONNAME%")
WScript.Echo connection
“控制台”=本地计算机

“RDP Tcp#0”=远程桌面(0可以是任何数字)

“控制台”=本地计算机


“RDP Tcp#0”=远程桌面(0可以是任何数字)

这里有一个更简单的解决方案:

Set oShell = CreateObject( "WScript.Shell" )
sessionName=oShell.ExpandEnvironmentStrings("%SESSIONNAME%")
if ( sessionName = "Console" ) then 

    Msgbox "You are running directly!"
else

    MsgBox "You are in a Remote Session!"

end if

这里有一个更简单的解决方案:

Set oShell = CreateObject( "WScript.Shell" )
sessionName=oShell.ExpandEnvironmentStrings("%SESSIONNAME%")
if ( sessionName = "Console" ) then 

    Msgbox "You are running directly!"
else

    MsgBox "You are in a Remote Session!"

end if

我甚至不确定是否可以直接从VBScript轻松调用这些。。我说的是修复安装程序中的错误,而不是症状。安装程序在远程桌面会话中失败的原因不多。我正在使用链式MSI功能。显然,这是一个已知的bug,Earlz和durilai,我还是听从你的建议,摆脱了MSI的链式功能。使用Windows 2008 Server,您无法使用RDP获取会话0。我甚至不确定是否可以直接从VBScript轻松调用这些会话。。我说的是修复安装程序中的错误,而不是症状。安装程序在远程桌面会话中失败的原因不多。我正在使用链式MSI功能。显然,这是一个已知的bug,Earlz和durilai,我还是听从你的建议,摆脱了MSI的链式功能。使用Windows 2008 Server,您无法使用RDP获取会话0。我曾想过这样做,但实际上我需要知道会话id。如果用户使用/console或/admin选项启动mstsc,他们将获得会话0,并且安装成功。我想您应该明白,使用/console将有效地取代控制台会话。如果有人已经登录,系统将提示他们让您控制,除非该用户与您使用/console选项连接的帐户相同。无论哪种方式,会话都将显示为控制台。我曾想过这样做,但实际上我需要知道会话id。如果用户使用/Console或/admin选项启动mstsc,他们将获得会话0,并且安装成功。我想您应该明白,使用/Console将有效地取代控制台会话。如果有人已经登录,系统将提示他们让您控制,除非该用户与您使用/console选项连接的帐户相同。无论哪种方式,会话都将显示为控制台。