捆绑的GTK#应用程序将无法在新的Win7安装上运行

时间:2012-07-03 08:46:36

标签: c# windows dependencies gtk# mkbundle

我在MonoDevelop中为一个大学作业制作了一个C#GTK#应用程序,却发现它不会在大学计算机上运行,​​因为我们没有管理员权限来安装GTK#或Mono库。经过一些研究,我发现了在Cygwin中使用mkbundle将所需的DLL与可执行文件捆绑在一起的技术。我按照这些说明操作:

http://www.joebest.org/2011/09/mono-and-mkbundle-on-windows.html

由于我在家时无法在大学计算机上进行测试,因此我正在使用完全安装Win 7 Pro 64位的虚拟机进行测试。我的开发机器运行相同的操作系统,但是在我的开发机上没有必要进行测试,因为它已经拥有了它需要的所有库,我没有任何错误。

我可以创建捆绑的可执行文件,没有麻烦。捆绑的可执行文件在我的开发机器上运行正常。当我尝试在干净的Win 7安装上运行它时没有任何反应。没有窗口;没有错误信息;没有。我只知道它正在运行,因为当我双击可执行文件时,我可以在任务管理器的进程选项卡中看到它的名称出现一两分钟。

为了进行比较,如果我尝试运行非捆绑应用程序,它会显示一条错误消息,说我需要安装.NET 4运行时。如果我安装.NET 4运行时(我知道大学计算机安装了.NET 4),那么应用程序崩溃时会出现此错误:

Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01:   keycommandeditor.exe
Problem Signature 02:   1.0.4560.18753
Problem Signature 03:   4fe8f352
Problem Signature 04:   glib-sharp
Problem Signature 05:   2.12.0.0
Problem Signature 06:   4e383483
Problem Signature 07:   2bc
Problem Signature 08:   0
Problem Signature 09:   System.DllNotFoundException
OS Version: 6.1.7600.2.0.0.256.48
Locale ID:  1033
Additional Information 1:   0bff
Additional Information 2:   0bff8d176610735333c3986b545525d3
Additional Information 3:   9af1
Additional Information 4:   9af19ba95df508dd9c076f2be86ba847

我已将mkbundle输出中显示的所有DLL添加到应用程序的文件夹中。如果我从文件夹中删除glib-sharp.dll,则错误变为:

Problem signature:
Problem Event Name: APPCRASH
Application Name:   KeyCommandEditor.exe
Application Version:    1.0.4560.18753
Application Timestamp:  4fe8f352
Fault Module Name:  KERNELBASE.dll
Fault Module Version:   6.1.7600.16385
Fault Module Timestamp: 4a5bdbdf
Exception Code: e0434352
Exception Offset:   0000b727
OS Version: 6.1.7600.2.0.0.256.48
Locale ID:  1033
Additional Information 1:   0a9e
Additional Information 2:   0a9e372d3b4ad19135b953a78882e789
Additional Information 3:   0a9e
Additional Information 4:   0a9e372d3b4ad19135b953a78882e789

我也尝试使用CorFlags.exe更改32BIT标志,但它似乎对任何内容都没有任何影响。

我只是想知道是否有人知道下一件事要尝试,因为我完全被这个难过。

1 个答案:

答案 0 :(得分:0)

通过它的声音你想要使用mkbundle2执行相同的任务但是对于Mono 2.x运行时。需要注意的另一件事可能是运行时依赖性(即:代码调用LoadLibrary和此类函数),因为mkbundles可能无法检测到它们。