我将使用Java应用程序的一个问题来解释我的问题,但是这个问题与Java没什么关系。
我正在使用Windows 7(64位),我想创建一个开始菜单快捷方式来执行GUI Java应用程序。从Java 8开始,安装程序将NTFS符号链接放在一个众所周知的位置,指向特定于发行版(即经常更改)的目录:
C:\>where javaw
C:\ProgramData\Oracle\Java\javapath\javaw.exe
C:\>dir C:\ProgramData\Oracle\Java\javapath\javaw.exe
Volume in drive C is OS
Volume Serial Number is D4DC-33AF
Directory of C:\ProgramData\Oracle\Java\javapath
05/03/2015 15:40 <SYMLINK> javaw.exe [C:\Program Files\Java\jre1.8.0_40\bin\javaw.exe]
我创建了一个快捷方式,其目标命令行是C:\ ProgramData \ Oracle \ Java \ javapath \ javaw.exe java_app.jar 但是当我运行它时,Windows说javaw.exe路径会不存在。我可以从Windows运行对话框成功运行相同的命令行;只是不是从捷径。有人能提供解决方案吗? (我不想创建一个批处理文件来运行命令,因为这会创建一个无用的控制台框。)
(NB你也可以在不使用Java的情况下看到同样的问题。只需创建一个指向Notepad.exe的符号链接(使用MKLINK命令),然后尝试创建符号链接的快捷方式。)
答案 0 :(得分:0)
您仍然可以执行无用的批处理文件。在其中使用CALL,以便在启动应用程序后立即关闭控制台窗口。
此外,现在不在Windows机器上,但是您可以创建CMD.exe
的快捷方式并在那里传递命令吗?如果出现控制台窗口,您可以与CALL
一起使用。
答案 1 :(得分:0)
这个简单的发射器可能很有用;您可以使用在javaw.exe快捷方式中使用的相同命令行参数为其创建一个或多个快捷方式。
#include <Windows.h>
void NoCRTMain(void)
{
wchar_t * cmdline = GetCommandLineW();
STARTUPINFO si;
PROCESS_INFORMATION pi;
GetStartupInfo(&si);
if (!CreateProcess(L"C:\\ProgramData\\Oracle\\Java\\javapath\\javaw.exe", cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
MessageBox(NULL, L"Unable to launch Java.", L"runjava.exe", MB_OK);
}
ExitProcess(0);
}
要在Visual Studio中编译,您需要更改一些项目设置:
(或者您可以将主函数从NoCRTMain更改为WinMain,但是您需要安装C运行时或静态链接它。)
显然,您可以轻松修改代码以运行javaw.exe以外的符号链接,尽管某些程序可能不喜欢argv[0]
未指向应用程序自己的可执行文件的事实。