An alternative approach would be using newer DiInstallDriver function. It works fine from a Windows service. Additionally you need to call SetupSetNonInteractiveMode(TRUE) in the process to suppress UI.
DiInstallDriver
SetupSetNonInteractiveMode(TRUE)