小编use*_*916的帖子

使用CreateProcess运行批处理文件

我正在尝试使用CreateProcess启动新的环境块并在新的环境块中运行批处理文件.我已经阅读了CreateProcess的msdn示例,并提出了如下所示的代码.

发生了什么,它会打开新的命令提示符,然后停在那里.由于某种原因,它不会运行我的.bat文件.使用system("CALL path")将调用.bat文件.

#include <iostream>

#define WINDOWS_LEAN_AND_MEAN
#include <Windows.h>

#include <strsafe.h>

#define BUFSIZE 4096

int main()
{
    //system("CALL C:\\HFSS\\setup_vars.bat");

    //return 0;

    LPWCH chNewEnv;
    LPTSTR lpszCurrentVariable;
    DWORD dwFlags = 0;
    TCHAR szAppName[] = TEXT("C:\\windows\\system32\\cmd.exe");
    TCHAR cmdArgs[] = TEXT("C:\\HFSS\\setup_var.bat");

    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    BOOL fSuccess;

    // Copy environment strings into an environment block. 
    chNewEnv = GetEnvironmentStrings();

    lpszCurrentVariable = (LPTSTR)chNewEnv;
    if (FAILED(StringCchCopy(lpszCurrentVariable, BUFSIZE, TEXT("MySetting=A"))))
    {
        printf("String copy failed\n");
        return FALSE;
    }

    lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1;
    if (FAILED(StringCchCopy(lpszCurrentVariable, BUFSIZE, TEXT("MyVersion=2"))))
    {
        printf("String copy …
Run Code Online (Sandbox Code Playgroud)

c++ winapi createprocess batch-file

9
推荐指数
1
解决办法
1万
查看次数

在 Inno Setup 编译器中运行 [Code] 或 PowerShell 脚本

[Code]在生成安装可执行文件之前,有没有办法在 Inno Setup 编译器中运行过程或 PowerShell 脚本?

powershell inno-setup pascalscript

5
推荐指数
1
解决办法
4316
查看次数

为什么其他文件夹路径也使用 SetX 添加到系统 PATH 而不仅仅是指定的文件夹路径?

我有一个批处理文件,我使用system("name.bat"). 在该批处理文件中,我试图读取注册表项的值。从 C++ 调用批处理文件会导致set KEY_NAME=HKEY_LOCAL_MACHINE\stuff失败。

但是,当我直接运行批处理文件(双击它)时,它运行良好。不知道我做错了什么。

批处理文件:

set KEY_NAME=HKEY_LOCAL_MACHINE\SOFTWARE\Ansoft\Designer\2014.0\Desktop
set VALUE_NAME=InstallationDirectory
REG QUERY %KEY_NAME% /v %VALUE_NAME%
Run Code Online (Sandbox Code Playgroud)

C++文件:

int main(void)
{
    system("CALL C:\\HFSS\\setup_vars.bat");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

更新1:

我发现密钥实际上在 64 位注册表中,并且我正在将 C++ 解决方案构建为 32 位。一旦我解决了这个问题,它就会发现注册表项很好。

现在我在将该路径添加到我的PATH变量时遇到了问题。它不是创建系统变量,而是创建用户变量PATH并将其添加到那里。

从命令行运行有效。

代码:

set KEY_NAME=HKLM\SOFTWARE\Ansoft\Designer\2014.0\Desktop\
set VALUE_NAME=InstallationDirectory

FOR /F "usebackq skip=1 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME%`) DO (
   set ValueName=%%A
   set ValueType=%%B
   set ValueValue=%%C
)

if defined ValueName (
   @echo Value Value = %ValueValue%
) else …
Run Code Online (Sandbox Code Playgroud)

registry batch-file

2
推荐指数
1
解决办法
1519
查看次数