首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用windows api函数CreateProcessA初始化mysql

使用windows api函数CreateProcessA初始化mysql
EN

Stack Overflow用户
提问于 2018-04-08 18:22:15
回答 2查看 50关注 0票数 1

我尝试使用以下命令初始化windows 10 64位下的mysql:

代码语言:javascript
复制
"D:\Test\Win32\Debug\mysqld.exe" --no-defaults --console --innodb-page-size=16384 --bootstrap "--lc-messages-dir=D:/Tests/Win32/Debug/share" --basedir=. --datadir=. --default-storage-engine=myisam --max_allowed_packet=9M --net-buffer-length=16k

当前目录为D:\testsWin32\Debug\data。

如果我从shell运行该命令,则没有问题。我用embarcadero写了一个c++程序,用MVS2013写了另一个程序,代码如下:

代码语言:javascript
复制
SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES)};
sa.bInheritHandle      = TRUE;
assert(CreatePipe(&m_ro, &m_wo, &sa, 0));
assert(SetHandleInformation(m_ro, HANDLE_FLAG_INHERIT, 0));
assert(SetHandleInformation(m_wo, HANDLE_FLAG_INHERIT, 0));
assert(CreatePipe(&m_ri, &m_wi, &sa, 0));
assert(SetHandleInformation(m_ri, HANDLE_FLAG_INHERIT, 0));
assert(SetHandleInformation(m_wi, HANDLE_FLAG_INHERIT, 0));

STARTUPINFOA si = {sizeof(STARTUPINFOA)};
si.dwFlags     |= STARTF_USESTDHANDLES;
si.hStdInput    = m_ri;
si.hStdOutput   = m_wo;
si.wShowWindow  = SW_SHOWMAXIMIZED | SW_SHOWNORMAL;

assert(CreateProcessA(ApplicationName, CommandLine, NULL, NULL, true, CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &si, &m_pi));

打印错误消息: Error 1105 Bootstrap file error,return code (32)后,Mysqld.exe退出。最近的查询:'‘

我先用了Mysql,然后用了MariaDb。两者都会写入相同的错误消息。

EN

回答 2

Stack Overflow用户

发布于 2018-04-09 17:17:30

您可以使用--bootstrap参数。你应该把SQL脚本写到标准输入中,但是你没有。你最终想要达到什么目的?

票数 0
EN

Stack Overflow用户

发布于 2019-11-29 22:45:32

我得到了同样的问题用开关创建进程在Borland中的工作方式与在命令行中不同。

我找到了一种绕过这个的方法,通过启动命令行脚本而不是直接启动MySQL,并在脚本中包含所有开关...这是对我起作用的变通方法:

代码语言:javascript
复制
void Twin_main::server_on()
    {
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    SECURITY_ATTRIBUTES attr0,attr1;

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

    attr0.nLength=sizeof(SECURITY_ATTRIBUTES);
    attr0.bInheritHandle=TRUE;
    attr0.lpSecurityDescriptor=NULL;
    attr1=attr0;

    if (CreateProcess(NULL,"MySQL_start.cmd",&attr0,&attr1,TRUE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi))
        {
        }
    }

其中,MySQL_start.cmd是:

代码语言:javascript
复制
cd ..\\MySQL Server 5.7.19
bin\mysqld --defaults-file="my.ini" --console

虽然放在与我的应用程序exe和MySQL相同的目录中,但上面的一个文件夹:

代码语言:javascript
复制
[MySQL Server 5.7.19]
 [bin]
  mysqld.exe
[MyApp]
 MyApp.exe
 MySQL_start.cmd

所以试着模仿它,然后重写MySQL_start.cmd以匹配您需要的内容……

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

https://stackoverflow.com/questions/49716840

复制
相关文章

相似问题

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