标签: createprocess

CreateProcess 的权限低于调用者

我们有一个以管理员权限运行的应用程序,其中(除了实际需要管理员权限的其他操作之外)用户可以发送电子邮件。

我们的电子邮件系统的工作原理如下:管理员运行的应用程序预编译电子邮件字段并启动(通过CreateProcess)我们的电子邮件应用程序,该应用程序调用实际的电子邮件发送。如果电子邮件完整并准备就绪,它将直接发送,否则它将显示 Outlook 电子邮件表单,让用户填写缺少的字段并发送。

我们的电子邮件应用程序用于TJclEmail处理电子邮件发送和显示 Outlook 电子邮件表单。我的问题是这样的:如果 Outlook 不以管理员身份运行,电子邮件应用程序将不会显示 Outlook 电子邮件表单,我猜是因为它是从管理员运行的应用程序调用的,所以它继承了权限。由于 Outlook 很少以管理员身份运行,我想找到一种CreateProcess以普通用户权限进行调用的方法,而不是从调用者那里继承管理权限。

有办法这样做吗?

delphi email winapi createprocess delphi-xe3

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

我怎么能在winXP中创建一个隐藏进程窗口(从任务栏)的进程?使用CreateProcess函数?

 /* CreateProcess initialization */
 STARTUPINFO si;
 PROCESS_INFORMATION pi;

 memset(&si, 0, sizeof(si));
 memset(&pi, 0, sizeof(pi));
 si.cb = sizeof(si);

 long ret;
 // si.wShowWindow = SW_HIDE;
 // hide process window.... // run in background..

 si.dwFlags = STARTF_USESHOWWINDOW;
 si.wShowWindow = SW_HIDE;

 if (!CreateProcess(0, exe,
        0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi)) {
    return;
 }
 //int prez = WaitForSingleObject(pi.hProcess, INFINITE);

 //CloseHandle(pi.hProcess);
Run Code Online (Sandbox Code Playgroud)

c++ winapi createprocess c++builder

0
推荐指数
1
解决办法
6644
查看次数

CreateProcess()无法正常工作

我正在使用此代码启动我的程序

     int _tmain(int argc, _TCHAR* argv[])
{
    STARTUPINFO cif;
    ZeroMemory(&cif,sizeof(STARTUPINFO));
    PROCESS_INFORMATION pi;
    if (CreateProcess(L"C:\\test\\test.exe",NULL,
        NULL,NULL,FALSE,CREATE_UNICODE_ENVIRONMENT,NULL,NULL,&cif,&pi)==TRUE)
    {
        cout << "process" << endl;
        cout << "handle " << pi.hProcess << endl;
    }
    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序正常启动,但立即失败(没有响应并失败).CreateProcess返回true.当我从代码启动test.exe时,它可以正常工作.

c++ winapi createprocess

0
推荐指数
1
解决办法
2018
查看次数

关闭由 CreateProcess 产生的子进程

我正在使用CreateProcess来运行我的进程/应用程序。目的是运行它,执行某些操作,等待某些指示,然后关闭它(使用TerminateProcess)。

我注意到这个应用程序/进程创建了子进程。另外,当终止创建的进程时,子进程并不会终止,仍会保留一段时间。

我想问是否有一个选项可以以某种方式杀死主进程的所有子进程。它会导致问题,因为当我再次执行CreateProcess时,会有以前进程的剩余内容,我认为它们会导致一些问题。

我真的很感谢你的帮助!

windows winapi subprocess process createprocess

0
推荐指数
1
解决办法
906
查看次数

haskell中IO句柄的多行内容不显示任何内容

我一直在试验Haskell.我正在尝试编写一个Web爬虫,我需要使用外部curl二进制文件(由于一些代理设置,curl需要有一些特殊的参数,似乎不可能/很难在haskell代码中设置,所以我宁愿只是传递它作为命令行选项.但这是另一个故事...)

在底部的代码中,如果我更改标记的行curl而不是curl --help输出渲染正确并给出:

"curl: try 'curl --help' or 'curl --manual' for more information
" 
Run Code Online (Sandbox Code Playgroud)

否则字符串为空 - 因为`curl --help'响应是多行的.我怀疑在haskell中,每个新行清除缓冲区.(同样适用于其他简单的shell命令,如lsls -l等)

我如何解决它?

代码:

import System.Process
import System.IO
main = do
    let sp = (proc "curl --help"[]){std_out=CreatePipe} -- *** THIS LINE ***
    (_,Just out_h,_,_)<- createProcess sp
    out <-hGetContents out_h
    print out
Run Code Online (Sandbox Code Playgroud)

io haskell createprocess

0
推荐指数
1
解决办法
66
查看次数

当exe文件无效时,CreateProcess会等待

我想制作一个简单的C++程序,它使用CreateProcess一次运行多个exe文件.如果exe文件无效(填充了随机数据),则会出现一个消息框,表示该文件与64位Windows不兼容,这很好,但我的程序会等到消息框关闭.有没有办法绕过这个?

c++ windows winapi createprocess

0
推荐指数
1
解决办法
129
查看次数

CreateProcess不会使用参数启动proccess

所以我使用这段代码来启动带参数的控制台应用程序:

#include <iostream>
#include <windows.h>

using namespace std;

void StartProgram(char argv[])
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    CreateProcess
    (
        TEXT("PlayerDebug.exe"),
        (LPSTR)argv,
        NULL,NULL,FALSE,
        CREATE_NEW_PROCESS_GROUP | CREATE_NO_WINDOW,
        NULL,NULL,
        &si, &pi
    );
};

int main()
{
    StartProgram("sound.wav");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

"PlayerDebug.exe"显示用于调用它的参数.但是当我按照我展示的方式使用CreateProcess运行它时,它不会显示任何内容.我检查并在任务管理器中似乎出现,但仍然不显示参数.我也尝试写入cout << argv;函数void StartProgram(char argv[])并返回" sound.wav",这是正确的.但似乎这个论点没有传递给PlayerDebug.exe,我不知道为什么.我做错了什么?(我是C++编程的新手)

c++ windows winapi createprocess

0
推荐指数
1
解决办法
656
查看次数

CreateProcess 返回的进程 ID 不在任务管理器中

我使用 Windows API CreateProcess() 创建一个进程。此函数返回的进程 ID 不在任务管理器中。当我尝试使用 TerminateProcess() 终止此进程时。GetLastError() 返回 5。使用 chrome 作为示例浏览器。

我的目标是创建一个浏览器进程,然后在身份验证后关闭浏览器。

我的示例代码是这样的:

int main()
{
    wstring app{L"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"};
    PROCESS_INFORMATION browserProcessInfo;
    STARTUPINFO browserStartupInfo;
    ZeroMemory(&browserStartupInfo, sizeof(browserStartupInfo));
    ZeroMemory(&browserProcessInfo, sizeof(browserProcessInfo));
    wstring cmdline;
    cmdline = app + wstring{ { L" --new-windows" } };
    bool bProcessCreated = CreateProcess(NULL,(LPWSTR) (cmdline.c_str()), NULL, NULL, TRUE,     NORMAL_PRIORITY_CLASS , NULL, NULL, &browserStartupInfo, &browserProcessInfo);
    auto handle = OpenProcess(PROCESS_TERMINATE, FALSE, browserProcessInfo.dwProcessId);
    auto terminateStatus = TerminateProcess(handle, 1);
    auto errorNumber = GetLastError();
    CloseHandle(browserProcessInfo.hProcess);
    CloseHandle(browserProcessInfo.hThread);
}
Run Code Online (Sandbox Code Playgroud)

c++ winapi createprocess

0
推荐指数
1
解决办法
112
查看次数

如何在 C++ 中调用 unicode 函数 CreateProcessW 来启动 Windows 可执行文件?

这里有一个如何在堆栈交换上调用 CreateProcess 的示例,但是 Windows 10 似乎不再支持此功能,并且您必须使用 unicode 版本 CreateProcessW。

与 ASCI 版本类似,我正在寻找一个示例:

  1. 启动一个 EXE
  2. 等待 EXE 完成。
  3. 可执行文件完成时正确关闭所有句柄。

c++ unicode createprocess

-1
推荐指数
1
解决办法
6810
查看次数

CreateProcess函数而不是系统

我创建了一个代码,使用Windows窗体应用程序来构造一个gui.我在我的代码中使用系统命令来调用外部.exe.但是,这种方法创建了一个命令行终端.我发现我可以在这里用CreateProcess函数替换系统.我该如何使用这个功能?我应该指定哪些参数才能运行?我现在的代码是:

 string run_template = "a.exe -i " + s1 + " -r 10 -f image2  filename%03d.jpg";
 system(run_template.c_str());
Run Code Online (Sandbox Code Playgroud)

编辑:

 #include <tchar.h>

 string workPath = "";
 string args = "-i " + s1 + " -r 10 -f image2  vid/frames/filename%03d.jpg";

 HINSTANCE hRet = ShellExecute(NULL, _T("open"), _T("a.exe"), _T(args.c_str()), _T(workPath.c_str()), SW_HIDE);
 DWORD errNum = GetLastError();
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

1>c\projects\first_api\first_api\Form1.h(229): error  C2065: 'Largs' : undeclared identifier
1>c:\projects\first_api\first_api\Form1.h(229): error C2228: left of '.c_str' must have class/struct/union
1>          type is ''unknown-type'' 
1>c:\projects\first_api\first_api\Form1.h(229): error C2065: 'LworkPath' : undeclared …
Run Code Online (Sandbox Code Playgroud)

c++ winapi system createprocess

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

WinAPI - 当C:\ Program文件存在时,CreateProcessW失败

我运行以下C代码来创建一个进程.exe文件位于C:\ Program Files\Exes\Start\process1.exe

CreateProcessW(NULL, (char*) exePath, 
                           NULL, NULL, TRUE, 
                           flags, 
                           NULL, NULL, &startupInfo, &processInformation);
Run Code Online (Sandbox Code Playgroud)

现在有些计算机随机拥有名为Program的文件位于C:\ Program,导致create process失败并显示错误:

%1不是有效的Win32应用程序.

有没有办法解决这个问题,除了重命名文件,因为有几十个Windows Vms执行此C代码.这个错误随机发生在几台机器上.

c winapi createprocess

-3
推荐指数
1
解决办法
179
查看次数

如何将argv转换为CreateProcess的lpCommandLine参数?

我想编写一个启动另一个应用程序的应用程序.像这样:

# This will launch another_app.exe
my_app.exe another_app.exe 
# This will launch another_app.exe with arg1, arg and arg3 arguments
my_app.exe another_app.exe arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

这里的问题是我正在进入char* argv[]我的main函数,但我需要将它合并到LPTSTR以便将其传递给CreateProcess.

有一个GetCommandLine函数,但我不能使用它,因为我从Linux移植代码并绑定argc/argv(否则,这对我来说是一个非常难看的黑客).

我不能轻易地手动合并参数,因为argv[i]可能包含空格.

基本上,我想反过来CommandLineToArgvW.有没有标准的方法来做到这一点?

c c++ windows winapi createprocess

-4
推荐指数
2
解决办法
651
查看次数

CreateProcess与CreateFile EXE

[编辑]

  • CreateProcess创建一个过程(例如,从.exe文件)

  • CreateFile可以创建/打开文件。如果打开.exe文件,该执行文件将运行。在这种情况下,它等于CreateProcess吗?

在这种情况下有什么区别吗?我是新手,谢谢您!

c++ windows winapi process createprocess

-4
推荐指数
1
解决办法
143
查看次数

标签 统计

createprocess ×13

winapi ×11

c++ ×9

windows ×5

c ×2

process ×2

c++builder ×1

delphi ×1

delphi-xe3 ×1

email ×1

haskell ×1

io ×1

subprocess ×1

system ×1

unicode ×1