0

我需要在 Ubuntu 启动时运行 ac# Windows Forms 应用程序(Mono 应用程序),然后我尝试使用 Upstart。我手动运行这个应用程序很好,但是当我使用 Upstart 脚本时,如下所示:

description "Indsys Andon"

start on runlevel [2345]
stop on runlevel [016]

setuid nobody
setgid nogroup
respawn
console log

script
     /usr/bin/mono /usr/lib/IndsysAndon/IndsysAndon.exe "$@"
end script

在 Indsys.exe.log 中出现错误消息:

A Unhanled Exception : System.TypeInitializationException: An exception was throw
Parameter name: Display
...

当我将脚本用作如何将我的单声道程序添加到启动时?,因此,在 Indsys.exe.log 中的错误消息是:

run-detectors: unable to find an interpreter for /usr/lib/IndsysAndon/IndsysAndon.exe

我不知道权利,但我认为我的需求很简单。真的有必要使用Upstart吗?我也尝试通过 rc.local 失败,插入:

 /usr/bin/mono /usr/lib/IndsysAndon/IndsysAndon.exe

请有人帮助我。谢谢,

4

3 回答 3

1

我认为单声道上的 WinForms 应用程序需要一个有效的 Xserver 运行和一个有效的 DISPLAY 环境变量。它应该从 X 会话运行或将输出重定向到有效的会话(它可以在另一台机器上)。

要进行验证,请尝试从添加“DISPLAY=''”的控制台运行您的应用程序。

尝试使用空的 DISPLAY 变量启动keepass(一个winforms应用程序)时遇到同样的错误。

$ DISPLAY= /usr/bin/mono /usr/share/keepass/KeePass.exe

Unhandled Exception:
System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.XplatUI ---> System.ArgumentNullException: Could not open display (X-Server required. Check you DISPLAY environment variable)
Parameter name: Display
  at System.Windows.Forms.XplatUIX11.SetDisplay (IntPtr display_handle) [0x00000] in <filename unknown>:0 
  at System.Windows.Forms.XplatUIX11..ctor () [0x00000] in <filename unknown>:0 
  at System.Windows.Forms.XplatUIX11.GetInstance () [0x00000] in <filename unknown>:0 
  at System.Windows.Forms.XplatUI..cctor () [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at System.Windows.Forms.Application.EnableVisualStyles () [0x00000] in <filename unknown>:0 
  at KeePass.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.XplatUI ---> System.ArgumentNullException: Could not open display (X-Server required. Check you DISPLAY environment variable)
Parameter name: Display
  at System.Windows.Forms.XplatUIX11.SetDisplay (IntPtr display_handle) [0x00000] in <filename unknown>:0 
  at System.Windows.Forms.XplatUIX11..ctor () [0x00000] in <filename unknown>:0 
  at System.Windows.Forms.XplatUIX11.GetInstance () [0x00000] in <filename unknown>:0 
  at System.Windows.Forms.XplatUI..cctor () [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at System.Windows.Forms.Application.EnableVisualStyles () [0x00000] in <filename unknown>:0 
  at KeePass.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0

也许您可以设置一个虚拟 X 服务器,这个问题可能会对您有所帮助:我应该在 debian 上与 openoffice 一起使用什么虚拟 X 服务器?

于 2013-10-04T02:56:29.463 回答
0

您可以尝试制作一个脚本来调用您的应用程序,例如

  #!/bin/sh
  exec /usr/bin/mono PREFIX/lib/APPLICATION/app.exe "$@"

然后从暴发户调用该脚本?我已经很久没有这样做了,但我似乎记得做过类似的事情......

这也可能有帮助:应用程序部署

于 2013-10-03T17:35:22.270 回答
0

朋友们,我用另一种方法解决了这个需求。如下: 在 Ubuntu 中使用“启动应用程序”在启动时运行 Mono App

非常感谢您的关注!

于 2013-10-05T01:13:56.783 回答