понедельник, 1 августа 2011 г.

Внедрение скрипта VBScript в EXE-файл (C#)

Создаем пустой консольный проект в C#.

Затем добавляем файл скрипта в ресурсы проэкта
В VS2010 это можно сделать через:
RMB на имени проекта->Properties->Resources->Add Resource->Add New Text File

Теперь можно получить содержимое скрипта, сохранить и запустить его.
Исходный код достаточно прост.


Чтобы получить содержимое скрипта, я использую:

Properties.Resources.MyEmbeddedScript
где MyMbeddedScript - имя ресурса со скриптом.

Получить случайное, временное имя файла для сохранения скрипта:
string scriptFileName = Path.GetTempFileName().Replace(".tmp",".vbs");

Сохранение и запуск скрипта:
File.WriteAllText(scriptFileName, content);
startedProcess = Process.Start(scriptFileName);

Чтобы запустить скрипт под другим пользователем, можно использовать следующий метод:
RunAs без ввода пароля

Аналогичным способом можно превратить любой скрипт (.vbs, .js, .ahk и т.д) в исполняемый .exe-файл.

Исходный код программы:
using System;
using System.Security;
using System.Diagnostics;
using System.IO;

namespace scriptEmbed
{
    class Program
    {
        static int Main(string[] args)
        {
            return RunScript(Properties.Resources.MyEmbeddedScript);
        }
        static int RunScript(string content)
        {
            string scriptFileName = Path.GetTempFileName().Replace(".tmp",".vbs");
            Process startedProcess;
            try
            {
                File.WriteAllText(scriptFileName, content);
                startedProcess = Process.Start(scriptFileName);
                
                while (!startedProcess.HasExited) ;

                File.Delete(scriptFileName);
                
                return startedProcess.ExitCode;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return 1;
            }
        }
        static string GetTempFolder()
        {
            return System.Environment.GetEnvironmentVariable("TEMP");
        }
    }

}





Комментариев нет:

Отправить комментарий