【问题标题】:mono gtk# - hello world deploy to windowsmono gtk# - hello world 部署到 Windows
【发布时间】:2013-05-01 07:20:52
【问题描述】:

我有一个非常简单的 Hello World 示例,我使用 Mono 和 gtk# 在 linux 主机上编写。它只是显示一个带有按钮的窗口。现在我试图让二进制文件在 Windows 上运行但失败了。我使用单声道主页上的独立安装程序安装了 gtk#。当我启动应用程序失败的原因是:

System.DllNotFoundException 未处理:无法加载 DLL 'libglib-2.0-0.dll':找不到指定的模块。 (来自 HRESULT 的异常:0x8007007E)来源=glib-sharp

有什么建议吗? BR

【问题讨论】:

  • 我不认为独立安装程序会安装所有内容,您使用的安装程序是什么?
  • 请注意:我假设您在尝试执行 GTKSharp 之前就安装了它。安装 GTKSharp 后我会尝试重新启动。问题是 GTKSharp 设置的 PATH 环境变量还没有被识别。

标签: windows mono gtk#


【解决方案1】:

您需要通过 mono.exe 运行您的应用程序,或者只需将 mono.exe 位置添加到 PATH 环境变量值。你可以在运行时这样做:

    [STAThread]
    public static void Main(string[] args)
    {
        var dllDirectory = @"C:\Program Files (x86)\Mono\bin";
        Environment.SetEnvironmentVariable("PATH", Environment.GetEnvironmentVariable("PATH") + ";" + dllDirectory);
        Run();
    }

    private static void Run()
    {
        Gtk.Application.Init();
        Forms.Init();

        var app = new App();
        var window = new FormsWindow();
        window.LoadApplication(app);
        window.SetApplicationTitle("Game of Life");
        window.Show();

        Gtk.Application.Run();
    }

【讨论】:

  • 感谢您的提示 -- 我想知道 SetDllDirectory() API 是否也能正常工作(因为这是一个仅限 Windows 的问题),在这种情况下使用 pinvoke 并不可怕。跨度>
【解决方案2】:

您必须在命令提示符下使用regsvr32 libglib-2.0-0.dll 在 Windows 中注册 DLL“libglib-2.0-0.dll”。另一种方法是将所有依赖项打包到可执行文件中。

希望这对您有所帮助。

-戴夫

【讨论】:

  • libglib-2.0-0.dll 不是 COM dll,所以不能注册!
猜你喜欢
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 2021-02-12
  • 2015-11-27
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多