Question

How can I modify an application from Console Application Type to Windows Application Type and vice versa with Mono.Cecil?

Was it helpful?

Solution

To convert a console .exe to windows .exe, you can use:

var file = "foo.exe";
var module = ModuleDefinition.ReadModule (file);
// module.Kind was previously ModuleKind.Console
module.Kind = ModuleKind.Windows;
module.Write (file);

The other way around is as simple as choosing the appropriate ModuleKind value. From Cecil's source:

public enum ModuleKind {
    Dll,
    Console,
    Windows,
    NetModule,
}

OTHER TIPS

For people who needed more help on this like me :)

you may need the apt pacakge libmono-cecil-cil-dev

//mono-cecil-set-modulekind-windows.cs
using System;
using Mono.Cecil;

namespace CecilUtilsApp {
    class CecilUtils {
        static void Main(string[] args) {
            var file = args[0];
            var module = ModuleDefinition.ReadModule (file);
            module.Kind = ModuleKind.Windows;
            module.Write (file);
        }
    }
}

// -----
//Makefile
//mono-cecil-set-modulekind-eq-windows.exe:
//    mcs $(shell pkg-config --libs mono-cecil) ./mono-cecil-set-modulekind-windows.cs
./mono-cecil-set-modulekind-windows.exe myprog.exe
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top