Не уверен, поможет ли это вашей общей проблеме, но это должно ответить на вопрос в вашем первом предложении.
Первоначально я сделал что-то подобное с помощью установщика Nullsoft NSIS несколько лет назад.
Если вы просто хотите запустить аппаратное сканирование ванили, вы можете использовать следующий код (предоставленный в C # для тега .net в этом вопросе):
Это класс-оболочка для функций P / Invoke
public static class Win32Api
{
public const int CM_LOCATE_DEVNODE_NORMAL = 0x00000000;
public const int CM_REENUMERATE_NORMAL = 0x00000000;
public const int CR_SUCCESS = 0x00000000;
[DllImport("CfgMgr32.dll", SetLastError=true)]
public static extern int CM_Locate_DevNodeA(ref int pdnDevInst, string pDeviceID, int ulFlags);
[DllImport("CfgMgr32.dll", SetLastError=true)]
public static extern int CM_Reenumerate_DevNode(int dnDevInst, int ulFlags);
}
Это пример того, как их использовать
int pdnDevInst = 0;
if (Win32Api.CM_Locate_DevNodeA(ref pdnDevInst, null, Win32Api.CM_LOCATE_DEVNODE_NORMAL) != Win32Api.CR_SUCCESS)
throw new Exception("something...");
if (Win32Api.CM_Reenumerate_DevNode(pdnDevInst, Win32Api.CM_REENUMERATE_NORMAL) != Win32Api.CR_SUCCESS)
throw new Exception("something else...");
Я просто быстро перевел это из документов MSDN C ++ и протестировал вшип, поэтому я знаю, что это работает, но это не качество продукции.Кроме того, если вы заботитесь о конкретных кодах возврата, вы можете найти их в cfgmgr32.h.