Batch file 如何创建以管理员身份打开32位cmd提示符以运行另一个批处理文件的批处理文件

Batch file 如何创建以管理员身份打开32位cmd提示符以运行另一个批处理文件的批处理文件,batch-file,cmd,Batch File,Cmd,我有一个批处理文件,当前必须执行以下操作才能运行: 以管理员身份打开SYSWOW64\cmd.exe(这是一个32位应用程序) cd c:\mybatchfilelocation\ 然后运行批处理文件batchfile.bat 我只希望能够以管理员身份运行一个批处理,以管理员身份自动打开SYSWOW64\cmd.exe(提示输入管理员用户名和密码即可),然后让该批处理运行my batchfile.bat 我已经看到,如果在运行批处理文件之前在批处理文件中预先指定/user:machinename

我有一个批处理文件,当前必须执行以下操作才能运行:

  • 以管理员身份打开SYSWOW64\cmd.exe(这是一个32位应用程序)
  • cd c:\mybatchfilelocation\
  • 然后运行批处理文件batchfile.bat
  • 我只希望能够以管理员身份运行一个批处理,以管理员身份自动打开SYSWOW64\cmd.exe(提示输入管理员用户名和密码即可),然后让该批处理运行my batchfile.bat

    我已经看到,如果在运行批处理文件之前在批处理文件中预先指定/user:machinename\administrar,并且它只提示输入密码,那么可以在哪里执行此操作,但这需要部署到客户,我不能依赖他们编辑该文件。当他们需要输入时,我需要它与提示一起运行

    更新


    多亏了比尔,我再也不用担心SYSWOW64部分了。我只需要能够弄清楚如何让一个批处理文件以管理员身份打开cmd提示符,并让该cmd在同一目录下运行另一个批处理文件。

    您可以包括其他软件吗?为此目的,有许多可用的方法。也可以使用VBScript启动批处理脚本:

    Set app = CreateObject("Shell.Application")
    app.ShellExecute "C:\Windows\SYSWOW64\cmd.exe", "/c batchfile.bat" _
      , "C:\mybatchfilelocation\", "runas", 1
    

    你能包括额外的软件吗?为此目的,有许多可用的方法。也可以使用VBScript启动批处理脚本:

    Set app = CreateObject("Shell.Application")
    app.ShellExecute "C:\Windows\SYSWOW64\cmd.exe", "/c batchfile.bat" _
      , "C:\mybatchfilelocation\", "runas", 1
    

    要在可能运行64位Windows的计算机上的cmd shell脚本(批处理文件)中注册32位DLL

    @echo off
    setlocal enableextensions
    set REGSVR=
    if defined PROCESSOR_ARCHITEW6432 (
      set REGSVR=%SystemRoot%\system32\regsvr32.exe
    ) else (
      set REGSVR=%SystemRoot%\SysWOW64\regsvr32.exe
    )
    %REGSVR% /s "C:\Path\my dll file.dll"
    ...
    endlocal
    
    更新


    如果定义了行,则不应使用not。应该如上所述。

    要在可能运行64位Windows的计算机上的cmd shell脚本(批处理文件)中注册32位DLL

    @echo off
    setlocal enableextensions
    set REGSVR=
    if defined PROCESSOR_ARCHITEW6432 (
      set REGSVR=%SystemRoot%\system32\regsvr32.exe
    ) else (
      set REGSVR=%SystemRoot%\SysWOW64\regsvr32.exe
    )
    %REGSVR% /s "C:\Path\my dll file.dll"
    ...
    endlocal
    
    更新


    如果定义了行,则不应使用not。应该如上所述。

    我的问题是:1。为什么需要运行32位版本的cmd.exe?2.为什么您的脚本需要以管理员身份运行?因为软件是旧的VB COM,所以您必须使用32位版本注册它们。在UAC和Windows 2008服务器(现在是默认的)之前,在2003年服务器上没有使用过。所以你必须注册什么?请具体说明你需要完成什么,而不是你认为需要如何完成。也就是说,寻找问题的答案,而不仅仅是一个问题的答案。好吧……那么,所有这些与打开32位版本的cmd.exe有什么关系?您的应用程序的安装路径是否存储在某个位置(例如注册表设置)?如果是这样,您可以从shell脚本(批处理文件)引用此存储路径,这样您的客户就不需要知道它。在我看来,你应该寻求问题的解决办法,而不是对某个具体问题的答案。为什么需要运行32位版本的cmd.exe?2.为什么您的脚本需要以管理员身份运行?因为软件是旧的VB COM,所以您必须使用32位版本注册它们。在UAC和Windows 2008服务器(现在是默认的)之前,在2003年服务器上没有使用过。所以你必须注册什么?请具体说明你需要完成什么,而不是你认为需要如何完成。也就是说,寻找问题的答案,而不仅仅是一个问题的答案。好吧……那么,所有这些与打开32位版本的cmd.exe有什么关系?您的应用程序的安装路径是否存储在某个位置(例如注册表设置)?如果是这样,您可以从shell脚本(批处理文件)引用此存储路径,这样您的客户就不需要知道它。在我看来,您应该寻求问题的解决方案,而不是特定问题的答案。此代码:在32位2008服务器和64位2008 R2服务器上产生这些结果。我肯定我错过了什么。我在一个我不擅长的领域提供帮助,很抱歉这里没有什么。如果在64位Windows上运行32位应用程序,WOW 32位仿真器使用PROCESSOR_ARCHITEW6432环境变量来告诉“真实”的处理器架构。如果从64位cmd.exe运行代码,将看到SysWOW64而不是System32。如果从32位模式运行,您将看到system32,系统会自动将其重定向到SysWOW64。从64位版本运行它并观察结果。此外,代码应该显示是否定义,而不是是否未定义(请参阅更正的答案)。此代码:在32位2008服务器和64位2008 R2服务器上生成这些结果。我肯定我错过了什么。我在一个我不擅长的领域提供帮助,很抱歉这里没有什么。如果在64位Windows上运行32位应用程序,WOW 32位仿真器使用PROCESSOR_ARCHITEW6432环境变量来告诉“真实”的处理器架构。如果从64位cmd.exe运行代码,将看到SysWOW64而不是System32。如果从32位模式运行,您将看到system32,系统会自动将其重定向到SysWOW64。从64位版本运行它,并观察结果。此外,代码应该显示if-defined而不是if-not-defined(参见更正的答案)。