我製作了一個C++ DLL自定義WIX動作,在安裝時爲應用程序創建/更新配置文件,並在卸載時將其刪除。
雖然幾乎沒有文檔,官方nVidia API具有所需的NvAPI_DRS_ *函數。
這裏有一個工作流程:NvAPI_Initialize
(如果失敗,則意味着用戶沒有nVidia的GPU,這是不是一個錯誤),NvAPI_DRS_CreateSession
,NvAPI_DRS_LoadSettings
,NvAPI_DRS_FindProfileByName
。
如果沒有被發現,NvAPI_DRS_CreateProfile
,並三次調用NvAPI_DRS_SetSetting
,設置三個DWORD屬性:
- SHIM_MCCOMPAT_ID = SHIM_MCCOMPAT_ENABLE
- SHIM_RENDERING_MODE_ID = SHIM_RENDERING_MODE_ENABLE
- SHIM_RENDERING_OPTIONS_ID = SHIM_RENDERING_OPTIONS_DEFAULT_RENDERING_MODE
然後,請致電NvAPI_DRS_GetProfileInfo
然後按NvAPI_DRS_EnumApplications
,然後搜索EXE路徑。
卸載時,我通過調用NvAPI_DRS_FindProfileByName
然後NvAPI_DRS_DeleteProfile
刪除完整的配置文件。
在重新安裝和升級我做兩個,首先刪除然後添加。
不要忘了NvAPI_DRS_SaveSettings
最後。
P.S.最讓人意想不到的是,nVidia將存儲在NVDRS_APPLICATION :: appName字段中的路徑「歸一化」,並將它們轉換爲小寫字母,並將'\'
替換爲'/'
。由於這種「規範化」,沒有標準字符串比較函數適用於它們。