我想为我的jar程序做一个“启动程序”,基本上我的exe文件不会自己做任何事情,它只是用来启动我的jar程序。
我的jar程序可以打开一个文件,据我所知(因为这可能是问题所在)操作系统通过向包含文件路径的程序传递命令行参数来打开文件,对吗?
如果我使用Visual中的play按钮执行我的程序,它可以正常工作,我将参数放在Properties->Debug->Command line参数中,它启动jar并打开我的文件
如果我从cmd执行我的程序,并将参数传递给CMD,它可以正常工作,并再次打开mi文件。
但是如果我按一下我想打开的文件,然后“打开”.我得到了System.ComponentModel.Win32Exception
我想,也许这个程序需要安装,所以我创建了一个innoSetup安装程序,但是如果我做了右键单击->打开.我得到了Win32Exception
我做错了什么?
我的代码:
class Program
{
static void Main(string[] args)
{
var programa = new System.Diagnostics.Process();
programa.StartInfo.UseShellExecute = true;
programa.StartInfo.FileName = "Personas.jar";
String archivo ;
try
{
archivo = args[0];
}catch(System.IndexOutOfRangeException e)
{
archivo = null;
}
if(archivo != null)
{
programa.StartInfo.Arguments = archivo;
}
try
{
programa.Start();
}catch(Exception err)
{
}
}
}我不会将Java代码放在C#中,因为问题在中很明显
发布于 2017-01-08 20:20:03
使用Visual启动应用程序时,当前目录设置为正在启动的可执行文件的目录。我假设您的personas.jar文件与可执行文件位于同一个目录中,所以当您使用ShellExecute = true打开jar文件时,它会找到该文件,查找关联并成功运行。
当使用CMD时,您可能会从可执行目录中启动它,因此当前目录设置为上面所示,并且一切都按照计划再次工作。
但当你用open打开一个文件时..。当前目录设置为包含右键单击的文件的目录。这意味着当您尝试使用personas.jar打开ShellExecute时,它会在单击的文件目录中查找并且找不到它。所以失败了。
您需要获取到正在执行的程序集的路径,并使用它来设置当前目录或完全限定personas.jar的路径。
此外,在按关联打开文件时使用StartInfo对象的参数属性并不是一种有文档记录的用法。因此,尽管它现在可能起作用,但它在任何时候都可能停止工作。
https://stackoverflow.com/questions/41534539
复制相似问题