为什么我会收到“Win32Exception”?

时间:2017-01-08 15:50:07

标签: c# system.diagnostics win32exception

我想为我的jar程序制作一个“启动器”,基本上我的exe文件本身没有做任何事情,它只是用于启动我的jar程序。

我的jar程序可以打开一个文件,据我所知(请注意这个,因为这可能是问题)操作系统通过将命令行参数传递给包含文件路径的程序来打开文件, 对?

如果我使用Visual Studio中的播放按钮执行我的程序它工作正常,我将参数放在Properties-> Debug->命令行参数中,它启动我的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#

The exception

1 个答案:

答案 0 :(得分:0)

使用Visual Studio启动应用程序时,当前目录将设置为正在启动的可执行文件的目录。我假设您的personas.jar文件与您的可执行文件位于同一目录中,因此当您使用ShellExecute = true打开您的jar文件时,它会查找该文件以查找关联并成功运行。

使用CMD时,您可能是从可执行文件目录中启动它,因此当前目录设置如上所示,所有内容都按计划再次运行。

但是当您使用Open With打开文件时...当前目录设置为包含右键单击文件的目录。这意味着当您尝试使用ShellExecute打开personas.jar时,它会查找单击文件的目录并找不到它。所以失败。

您需要获取执行程序集的路径并使用它来设置当前目录或完全限定personas.jar的路径。

此外,在通过关联打开文件时使用StartInfo对象的Arguments属性不是记录的用法。因此,虽然现在它可能会起作用,但它可能会在任何时候停止工作。