首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SysWOW代替System32的System()函数

使用SysWOW代替System32的System()函数
EN

Stack Overflow用户
提问于 2022-04-23 18:08:30
回答 1查看 89关注 0票数 0

我花了最后一段时间甚至不知道解决这个问题需要多长时间,我终于发现了。我一直试图运行这一行代码:

代码语言:javascript
复制
system("C:\\Users\\Public\\automate.bat");

但是它没有执行一次脚本,而是重复执行我的脚本的第一行(在一个无限循环中)。我发现它用于windows CMD的路径是C:\Windows\SysWOW64\cmd.exe,而windows默认为C:\Windows\System32\cmd.exe.。我去了SysWOW CMD并运行了我的脚本,循环问题就发生了,而同样的脚本在System32 cmd上却完美无缺地工作。(我怀疑是因为代码中的某些不兼容性导致了SysWOW cmd失败)。我想知道如何更改C上的cmd.exe路径,使其指向windows的默认cmd,而不是SysWOW中的路径。

目前,我唯一尝试过的是:

代码语言:javascript
复制
system("C:\\Windows\\System32\\cmd.exe /c C:\\Users\\Public\\automate.bat");

这不起作用。

编辑:我的BAT文件的第一个操作是请求管理员perms,这似乎是窗口关闭的地方,然后重新打开:

代码语言:javascript
复制
@echo off

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params= %*
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params:"=""%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------
cd "C:\Users\Public"
:: more stuff here
EN

回答 1

Stack Overflow用户

发布于 2022-04-25 05:34:55

终于找到了解决这个问题的办法!在修改了我的环境变量之后,我发现用户system变量之间存在着冲突,它们具有不同的ComSpec路径。在将它们都更改为system32文件夹后,它们工作得完美无缺。谢谢大家的有益评论!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71982394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档