错误启动使用CreateProcess的一个Win32 C ++应用程序Java应用程序
-
22-09-2019 - |
题
我试图启动从C Java应用程序的应用程序++使用以下代码:
#include <windows.h>
#include <memory.h>
#include <tchar.h>
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {
STARTUPINFOW siStartupInfo;
PROCESS_INFORMATION piProcessInfo;
memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&piProcessInfo, 0, sizeof(piProcessInfo));
if (CreateProcess(TEXT("c:\\java\\jre\\bin\\java.exe"), TEXT("-jar testapp.jar"), NULL, NULL, false, CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &siStartupInfo, &piProcessInfo) == false) {
MessageBox(NULL, L"Could not load app", L"Error", 0);
}
CloseHandle(piProcessInfo.hProcess);
CloseHandle(piProcessInfo.hThread);
return 0;
}
当我建立并运行该程序得到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: testapp/jar
Caused by: java.lang.ClassNotFoundException: testapp.jar
at: java.net.URLClassLoader$1.run(Uknown Source)
at: java.security.AccessController.doPrivileged(Native Method)
at: java.net.URLClassLoader.findClass(Uknown Source)
at: java.lang.ClassLoader.loadClass(Uknown Source)
at: sun.misc.Launcher$AppClassLoader.loadClass(Uknown Source)
at: java.lang.ClassLoader.loadClass(Uknown Source)
Could not find the main class: testapp.jar. Program will exit.
在testapp.jar
文件是从一个Eclipse项目中导出在它的单个类可运行的JAR文件:
public class Test {
public static void main(String[] args) {
System.out.println("test");
}
}
在EXE和JAR文件是在完全相同的文件夹,我运行在命令行的EXE。如果我直接通过将c:\java\jre\bin\java.exe -jar testapp.jar
到命令提示一切正常运行JAR。
没有任何人有什么是怎么回事任何想法?
编辑:谢谢大家的帮助,但它看起来像我有现在的工作
。解决方案
解决它。我用:
if (CreateProcess(TEXT("C:\\Program Files\\Java\\jre6\\bin\\java.exe"), TEXT(" -jar test.jar"), NULL, NULL, false, CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &siStartupInfo, &piProcessInfo) == false) {
MessageBox(NULL, L"Could not load app", L"Error", 0);
}
而你使用:
if (CreateProcess(TEXT("C:\\Program Files\\Java\\jre6\\bin\\java.exe"), TEXT("-jar test.jar"), NULL, NULL, false, CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &siStartupInfo, &piProcessInfo) == false) {
MessageBox(NULL, L"Could not load app", L"Error", 0);
}
,当我用它,复制你的错误。所不同的是-jar
开关前面的空间,为什么这应该是,我不知道,我在错误偶然发现了它!
其他提示
我不得不改变我打电话CreateProcess的方式:
wchar_t *command = (wchar_t*)calloc(512, sizeof(wchar_t));
wsprintf(command, TEXT("c:\\java\\jre\\bin\\java.exe -jar testapp.jar"));
if (CreateProcess(NULL, command, NULL, NULL, false, CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &siStartupInfo, &piProcessInfo) == false) {
为参数CreateProcess()
为lpCurrentDirectory
指定文件:
的完整路径的过程的当前目录。该字符串还可以指定一个UNC路径。结果 如果该参数为NULL,则新进程将具有相同的电流驱动器和目录作为主叫处理。
您摘录缺少path
的定义,但它很可能设置不正确。
尝试-jar
后指定JAR的目录。这可能与当前工作目录做...
不隶属于 StackOverflow