Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么当我从桌面运行脚本时,WScript可以工作,而当作为Setup.exe的一部分运行时,WScript不能工作?_C#_Visual Studio 2013_Vbscript_Installshield_Wsh - Fatal编程技术网

C# 为什么当我从桌面运行脚本时,WScript可以工作,而当作为Setup.exe的一部分运行时,WScript不能工作?

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 _

我已经在这个问题上工作了大约6个小时了,我觉得我一事无成。我有一个vbscript要写入windows注册表,我想在安装.net Visual Studio程序时使用它。它写入注册表的本地计算机部分,因此必须编辑权限才能完成此操作。有关守则如下:

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提示。因此,要写入注册表的每台机器区域,您应该更喜欢使用注册表视图,从而使用注册表表中的条目。如果需要自定义值,请注意,可以在视图/表中指定特性引用,并且在写入值时将对其进行计算

如果您确实需要通过自定义操作写入注册表,请仔细考虑回滚场景,并且更喜欢使用“在系统上下文中延迟”的操作,因为如果安装是每台机器的话,这种自定义操作将能够访问管理权限。请注意,延迟的自定义操作无法访问大多数属性