使用Upstart在启动时运行Mono应用程序
本文关键字:运行 Mono 应用程序 启动 Upstart 使用 | 更新日期: 2023-09-27 18:33:58
我需要在Ubuntu启动上运行一个c# 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
我不知道权利,但我认为我的需求很简单。真的有必要使用暴发户吗?我也尝试了 rc.local 但没有成功,插入:
/usr/bin/mono /usr/lib/IndsysAndon/IndsysAndon.exe
有人帮帮我,拜托。谢谢
我认为单声道上的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服务器?
您可以尝试制作一个脚本来调用您的应用程序吗,例如
#!/bin/sh
exec /usr/bin/mono PREFIX/lib/APPLICATION/app.exe "$@"
然后从暴发户那里调用该脚本?我已经很久没有这样做了,但我似乎记得做过这样的事情......
这也可能会有所帮助:应用程序部署
朋友们,我用另一种方法解决了这个需求。遵循:在 Ubuntu 中启动时使用"启动应用程序"运行 Mono 应用程序
非常感谢您的关注!