【问题标题】:initiale mysql using windows api function CreateProcessA使用windows api函数CreateProcessA初始化mysql
【发布时间】:2018-09-17 21:38:12
【问题描述】:

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

"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:\Tests\Win32\Debug\data。

如果我从 shell 运行命令,没有问题。 我使用 embarcadero 编写了一个 c++ 程序,另一个使用 MVS 2013 编写了代码:

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));

Mysqld.exe 在打印错误消息后退出: [错误] 1105 引导文件错误,返回代码 (32)。最近的查询:''

我使用 Mysql First 而不是 MariaDb。两者都写相同的错误信息。

【问题讨论】:

  • 为什么--no-defalts??

标签: mysql visual-c++ mariadb c++builder


【解决方案1】:

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

【讨论】:

  • 以后想写sql
  • 让您的生活更轻松,只需使用 popen()。
【解决方案2】:

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

我找到了一种解决方法,方法是直接启动命令行脚本而不是 MySQL,并在脚本中设置所有开关...这是对我有用的解决方法:

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 在哪里:

cd ..\\MySQL Server 5.7.19
bin\mysqld --defaults-file="my.ini" --console

虽然与我的 App exe 和 MySQL 位于同一目录中,但上面的一个文件夹:

[MySQL Server 5.7.19]
 [bin]
  mysqld.exe
[MyApp]
 MyApp.exe
 MySQL_start.cmd

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    相关资源
    最近更新 更多