【问题标题】:Why am I getting "Win32Exception"?为什么我会收到“Win32Exception”?
【发布时间】:2017-01-08 15:50:07
【问题描述】:

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

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

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

【问题讨论】:

  • 这仅仅是因为 jar 是普通档案而不是 PE 可执行文件。您将不得不使用 java -jar nameOfJar.jar 启动它,虽然我不读西班牙也不了解 C#,我相信这是原因。
  • 你右键点击什么?在“打开方式”之后的对话框中选择什么?提示:检查工作目录
  • @glee8e:只要 JAR 文件与 Javaw.exe 相关联,它就可以工作
  • 还可以尝试:运行cmd,转到c:\ ,然后使用完整路径运行程序。可能也不行

标签: c# system.diagnostics win32exception


【解决方案1】:

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

使用 CMD 时,您可能是从可执行目录中启动它,因此当前目录设置如上,一切都按计划再次运行。

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

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

此外,在通过关联打开文件时使用 StartInfo 对象的 Arguments 属性未记录在案。因此,虽然它现在可以工作,但它可能随时停止工作。

【讨论】:

  • 你说的有道理,但我也尝试将我的文件复制到我的应用程序的同一目录中,所以当前目录对于两个文件,我的 jar 和我的文件都是相同的想打开,也没用。无论如何,我将尝试我的 jar 文件的完整路径,如果它有效,我会告诉你。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2016-08-21
  • 2014-07-04
  • 2020-06-06
  • 2018-12-26
  • 2021-03-05
  • 2013-07-13
相关资源
最近更新 更多