Создайте программу .NET, которая создает пользовательские EXE - PullRequest
1 голос
/ 29 марта 2012

Я хочу создать программу, которая создает исполняемый слайд-шоу.

Так что мне нужно вывести EXE с некоторым необходимым кодом и определенными встроенными ресурсами (изображениями) в нем.

.NET предоставляет такую ​​возможность?

Ответы [ 4 ]

1 голос
/ 29 марта 2012

Этого легко добиться.

Вы можете добавлять изображения в качестве встроенных ресурсов, а затем использовать метод Reflection для обнаружения и извлечения встроенных изображений.

Таким образом, программа, которую вы пишете, независимаиз списка картинок, которые являются просто встроенными ресурсами.Вы можете встроить изображения в качестве ресурсов с помощью Visual Studio или создать специальную программу для этого.

Некоторые примеры можно найти в http://msdn.microsoft.com/en-us/library/aa287676(v=VS.71).aspx и http://www.java2s.com/Code/CSharp/Development-Class/Saveandloadimagefromresourcefile.htm.

Удачи!

1 голос
/ 29 марта 2012

Вы можете использовать класс CSharpCodeProvider для компиляции кода во время выполнения и добавления встроенных ресурсов.Посмотрите на эту статью, где я объясняю, как это сделать: SlideShow Builder

0 голосов
/ 29 марта 2012

Как то, что SK-Logic сказал, что есть

http://msdn.microsoft.com/en-us/library/system.reflection.emit.aspx

вот пример этого

http://olondono.blogspot.com/2008/02/creating-code-at-runtime.html

Вы также можете создать файл проекта, файлы кода и использовать класс Process для вызова компилятора, если вам нужна помощь в этом, я могу привести пример

0 голосов
/ 29 марта 2012

это сгенерирует процесс для вас с указанным именем (вам все равно нужно будет добавить код для изображений):

    public static Process GenerateRuntimeProcess(string processName, int aliveDuration, bool throwOnException = true)
    {
        Process result = null;
        try
        {
            AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName() { Name = processName }, AssemblyBuilderAccess.Save);
            ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(processName, processName + ".EXE");
            TypeBuilder typeBuilder = moduleBuilder.DefineType("Program", TypeAttributes.Public);
            MethodBuilder methodBuilder = typeBuilder.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.Static, null, null);
            ILGenerator il = methodBuilder.GetILGenerator();
            il.UsingNamespace("System.Threading");
            il.EmitWriteLine("Hello World");
            il.Emit(OpCodes.Ldc_I4, aliveDuration);
            il.Emit(OpCodes.Call, typeof(Thread).GetMethod("Sleep", new Type[] { typeof(int) }));
            il.Emit(OpCodes.Ret);
            typeBuilder.CreateType();
            assemblyBuilder.SetEntryPoint(methodBuilder.GetBaseDefinition(), PEFileKinds.ConsoleApplication);
            assemblyBuilder.Save(processName + ".EXE", PortableExecutableKinds.Required32Bit, ImageFileMachine.I386);
            result = Process.Start(new ProcessStartInfo(processName + ".EXE")
            {
                WindowStyle = ProcessWindowStyle.Hidden
            });
        }
        catch
        {
            if (throwOnException)
            {
                throw;
            }
            result = null;
        }
        return result;
    }

вы можете найти больше информации о System.Reflection.Emit на MSDN здесь или учебник здесь или здесь .

на вашем месте я бы также изучил только использование powerpoint и / или приложения для просмотраи некоторые параметры командной строки, как указано здесь .может быть, вам вообще не нужно «создавать приложение, которое делает другое приложение слайд-шоу» ..

...