Установите драйвер во время установки проекта - PullRequest
1 голос
/ 22 февраля 2012

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

Вещи, которые я пробовал на основе поиска в Google / Stack:

Метод 1:

установить атрибут: [DllImport("DIFxAPI.dll", CharSet = CharSet.Auto, SetLastError = true)]

result = DriverPackagePreinstall(tempPath + "umpusbXP.inf", Flags);

if (result != 0)
MessageBox.Show("Driver 'umpusbXP.inf' installation failed.");

, где Flags были установлены различные комбинации

//0x00000010 
Int32 DRIVER_PACKAGE_LEGACY_MODE = 16;
//0x00000004
Int32 DRIVER_PACKAGE_FORCE = 4;
//0x00000008
Int32 DRIVER_PACKAGE_ONLY_IF_DEVICE_PRESENT = 8;

Кажется, не работает. Он будет возвращать различные ошибки, некоторые из которых я могу найти значение в Интернете, другие нет. наиболее распространенным является 0xE0000304 ERROR_INVALID_CATALOG_DATA => no cat (который я нашел в ). У других ошибок были номера, которых не было ни в этом файле, ни где-либо еще, что я мог найти.

Метод 2:

установить атрибут:

[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, tempPath + "umpusbXP.inf", 0);

Этот метод возвращает void, поэтому трудно получить какую-либо информацию из него. Само собой разумеется, это не устанавливает драйвер.

Метод 3:

установить атрибут:

[DllImport("setupapi.dll")]
public static extern bool SetupCopyOEMInf(

    string SourceInfFileName,
    string OEMSourceMediaLocation,
    OemSourceMediaType OEMSourceMediaType,
    OemCopyStyle CopyStyle,
    string DestinationInfFileName,
    int DestinationInfFileNameSize,
    ref int RequiredSize,
    string DestinationInfFileNameComponent

    );

затем использовал этот метод

string output ="";
int size = 0;
SetupCopyOEMInf(tempPath + "umpusbXP.inf", null, OemSourceMediaType.SPOST_PATH, OemCopyStyle.SP_COPY_OEMINF_CATALOG_ONLY, null, 0, ref size, output);

Я использую эти методы, насколько мне известно, но документацию было сложно читать. Я продолжаю проверять файл setupapi.log на наличие ошибок, но ни один не появляется. Как установить драйверы?

...