gpt4 book ai didi

java - JAR 文件在 Windows 启动时由 C++ 应用程序启动时不会运行

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:08 26 4
gpt4 key购买 nike

我有一个 JAR 文件,我想在系统启动时运行它 (OS=Windows)。为了让程序在系统启动时运行,我做了两件事:

  • 我用 C++ 制作了一个可执行文件,它将触发启动 JAR 文件。
  • HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run 中创建了一个名为 MyApp 的注册表项(名称实际上并不重要),其值是指向可执行。

可执行代码如下:

BOOL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR commandLine, int nCmdShow) {

ShowWindow(GetConsoleWindow(), SW_HIDE);

// First display a box with text 'Hello!'
stringstream msg; msg << "Hello!";
MessageBox(NULL, msg.str().c_str(), "", MB_OK);

// getJavaHome is a function
stringstream javadir; javadir << getJavaHome() << "\\bin\\java.exe";
stringstream params; params << " -jar jarfile.jar";

STARTUPINFO info = { sizeof (info) };
PROCESS_INFORMATION processInfo;

char* path = stringToCharArray(javadir.str().c_str());
char* args = stringToCharArray(params.str().c_str());

if (CreateProcess(path, args, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &info, &processInfo)) {
::WaitForSingleObject(processInfo.hProcess, INFINITE);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
return 0;
}

请注意,如您所见,此程序将在启动 JAR 文件之前输出一个消息框,上面写着“Hello!”

奇怪的是:

  • 当我通过双击运行可执行文件时,它会显示消息框,然后它会启动 JAR 文件。
  • 但是当系统启动并触发应用启动时,它显示Hello,但不会启动JAR 文件。

到底怎么来的? Annnd...如何解决?

最佳答案

我想这是工作目录的问题——最终它在自动启动时完全不同了。所以你应该传递正确的工作目录(不知道这是否可以用 CreateProcess() 完成);或者给你的 JAR 文件一个固定的绝对路径。

关于java - JAR 文件在 Windows 启动时由 C++ 应用程序启动时不会运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15244900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com