C# 为什么当我从桌面运行脚本时,WScript可以工作,而当作为Setup.exe的一部分运行时,WScript不能工作?
我已经在这个问题上工作了大约6个小时了,我觉得我一事无成。我有一个vbscript要写入windows注册表,我想在安装.net Visual Studio程序时使用它。它写入注册表的本地计算机部分,因此必须编辑权限才能完成此操作。有关守则如下:C# 为什么当我从桌面运行脚本时,WScript可以工作,而当作为Setup.exe的一部分运行时,WScript不能工作?,c#,visual-studio-2013,vbscript,installshield,wsh,C#,Visual Studio 2013,Vbscript,Installshield,Wsh,我已经在这个问题上工作了大约6个小时了,我觉得我一事无成。我有一个vbscript要写入windows注册表,我想在安装.net Visual Studio程序时使用它。它写入注册表的本地计算机部分,因此必须编辑权限才能完成此操作。有关守则如下: If Not WScript.Arguments.Named.Exists("elevate") Then CreateObject("Shell.Application").ShellExecute WScript.FullName _
If Not WScript.Arguments.Named.Exists("elevate") Then
CreateObject("Shell.Application").ShellExecute WScript.FullName _
, WScript.ScriptFullName & " /elevate", "", "runas", 1
WScript.Quit
End If
当我从我的桌面上运行脚本时,代码工作得非常完美,并且完全符合我的需要。但是,当我运行包含脚本的setup.exe时(即使我从桌面上运行setup.exe),我会从上面的WScript代码中得到一个对象必需的错误。我需要知道1)为什么会出现此错误以及如何允许访问WScript对象,或者如果不可能,则需要知道2)如何为我的脚本授予在不使用WScript的情况下写入本地计算机注册表所需的适当管理员权限。如果您将此脚本作为VBScript自定义操作运行,然后Windows安装程序使用自定义VB脚本主机。与wscript.exe和cscript.exe不同,此主机不提供
wscript
对象,因此对它的任何引用都将失败。您可以选择通过wscript.EXE将其作为EXE操作启动。我不建议这样做,至少在没有阅读我的第三段之前
另外,作为一般建议,您应该避免在自定义操作中提升,因为这样做可能会导致在单个安装过程中出现多个UAC提示。因此,要写入注册表的每台机器区域,您应该更喜欢使用注册表视图,从而使用注册表表中的条目。如果需要自定义值,请注意,可以在视图/表中指定特性引用,并且在写入值时将对其进行计算
如果您确实需要通过自定义操作写入注册表,请仔细考虑回滚场景,并且更喜欢使用“在系统上下文中延迟”的操作,因为如果安装是每台机器的话,这种自定义操作将能够访问管理权限。请注意,延迟的自定义操作无法访问大多数属性。
如果您将此脚本作为VBScript自定义操作运行,则Windows Installer将使用自定义VB脚本主机。与wscript.exe和cscript.exe不同,此主机不提供wscript
对象,因此对它的任何引用都将失败。您可以选择通过wscript.EXE将其作为EXE操作启动。我不建议这样做,至少在没有阅读我的第三段之前
另外,作为一般建议,您应该避免在自定义操作中提升,因为这样做可能会导致在单个安装过程中出现多个UAC提示。因此,要写入注册表的每台机器区域,您应该更喜欢使用注册表视图,从而使用注册表表中的条目。如果需要自定义值,请注意,可以在视图/表中指定特性引用,并且在写入值时将对其进行计算
如果您确实需要通过自定义操作写入注册表,请仔细考虑回滚场景,并且更喜欢使用“在系统上下文中延迟”的操作,因为如果安装是每台机器的话,这种自定义操作将能够访问管理权限。请注意,延迟的自定义操作无法访问大多数属性