Estoy creando una utilidad de Windows que, en parte, le permite al usuario activar Windows. Cuando ejecuto el comando slmgr /ato con system(). Obtenga el error "0x80004001 no implementado (SwbemObjectEX)". Cuando intento ejecutar el mismo comando de CMD, funciona bien. También se debe tener en cuenta que no falla cada vez, la mitad del tiempo funciona perfectamente. Al principio, pensé que tal vez estaba ejecutando los comandos demasiado rápido en sucesión, pero agregar un retraso no parece hacer una diferencia.

void activateWindows(char* key)
{
    EnableWindow(Main_activate_win, false);
    char cmd[41];
    sprintf(cmd, "slmgr /ipk %s", key);
    system(cmd);
    //Sleep(5000);
    system("slmgr /ato");
    EnableWindow(Main_activate_win, true);
}

Editar: Parece que solo falla de esta manera cuando se está instalando en una máquina que anteriormente tenía una versión diferente de Windows instalada.

2
Zachary Schroeder 28 jun. 2019 a las 17:25

1 respuesta

La mejor respuesta

Ok, finalmente lo descubrí. Estaba compilando mi programa como una aplicación de 32 bits porque estaba teniendo problemas al compilarlo de 64 bits inicialmente. Windows no permite que las aplicaciones de 32 bits accedan a las bibliotecas y ejecutables de 64 bits, y aparentemente que también ocurra para los procesos infantiles creados por ellos. Supongo que el script Slmgr.vbs intentaba acceder a un archivo o una biblioteca de 64 bits y no podía encontrarlo, de ahí el mensaje de error "No implementado". Recompilé como una aplicación de 64 bits y parece estar funcionando bien ahora. Este definitivamente probó mi paciencia.

0
Zachary Schroeder 3 jul. 2019 a las 15:53