Возможно ли выполнить код INF файла в C#

236
16 декабря 2017, 04:06

Подскажите, есть ли возможность выполнить INF файл внутри приложения?

Или выполнить все тоже самое, только через код C#

Код файла INF (защита MBR):

; MBRFilter.inf
;
[Version]
Signature = "$Windows NT$"
Class     = DiskDrive
ClassGUID = {4d36e967-e325-11ce-bfc1-08002be10318}
Provider  = %csco%
DriverVer=09/21/2016,11.39.10.746
CatalogFile=MBRFilter.cat
;
; General installation section
;
[DefaultInstall]
CopyFiles = @MBRFilter.sys
Addreg    = MBRFilter.AddReg
[DefaultInstall.NT]
CopyFiles = @MBRFilter.sys
Addreg    = MBRFilter.AddReg
[DestinationDirs]
DefaultDestDir = 12
[MBRFilter.AddReg]
HKLM, System\CurrentControlSet\Control\Class\{4d36e967-e325-11ce-bfc1-8002be10318}, UpperFilters, 0x00010008, MBRFilter

;
; Service installation section
;
[DefaultInstall.Services]
AddService = MBRFilter, , MBRFilter.Service.Install
[DefaultInstall.NT.Services]
AddService = MBRFilter, , MBRFilter.Service.Install
[MBRFilter.Service.Install]
DisplayName    = %service_desc%
ServiceType    = 1
StartType      = 0
ErrorControl   = 1
ServiceBinary  = %12%\MBRFilter.sys
LoadOrderGroup = "PnP Filter"
[SourceDisksFiles]
MBRFilter.sys=1
[SourceDisksNames]
1 = %diskid1%,,,
;
; Localizable Strings
;
[Strings]
csco         = "Cisco Talos"
service_desc = "MBR write filter"
diskid1      = "Cisco Talos MBR filter"
Answer 1

Можно попробовать через Process запустить в инсталляторе InfDefaultInstall, запуск процесса лучше обернуть в блок try...catch:

var pathInf = "C:\\MBR.inf"; // путь к вашему inf файлу 
var process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/c C:\\Windows\\System32\\InfDefaultInstall.exe " + pathInf;
try
{
    process.Start();
    process.WaitForExit();
}
catch(Exception ex)
{
    // ex.Message - будет хранить текст возникшего исключения
}
finally
{
    process.Dispose();
}

А еще нашел вот такой способ запуска (для начала импортировать):

using System.Runtime.InteropServices;
[DllImport(
    "Setupapi.dll", 
     EntryPoint="InstallHinfSection",
     CallingConvention=CallingConvention.StdCall)]
public static extern void InstallHinfSection(
    [In] IntPtr hwnd,
    [In] IntPtr ModuleHandle,
    [In, MarshalAs(UnmanagedType.LPWStr)] string CmdLineBuffer,
    int nCmdShow);

А затем вызов:

InstallHinfSection(IntPtr.Zero, IntPtr.Zero, "путь к .inf файлу", 0);

Ссылка на источник: install/uninstall an .inf driver programmatically using C# .net

READ ALSO
C# парсинг JSON

C# парсинг JSON

Добрый день , столкнулся с проблемой при парсинге Json средствами C#Библиотека:Newtonsoft

307
Новогодняя открытка в C# [требует правки]

Новогодняя открытка в C# [требует правки]

Нужно создать открытку на новогоднюю тематику на языке C#Помогите пожалуйста, как сделать падающий снег и еще что нибудь подобное!

332
Как складывать значения аргумента?

Как складывать значения аргумента?

Здравствуйте, есть ли способ правильно складывать прошлые значения аргументов с новыми?

418