es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Hay alguna manera de iniciar un programa en modo administrador mediante un comando?

Como dice el título, me pregunto si hay alguna forma de iniciar mi programa en modo administrador utilizando una función, código, comando o algo similar incluido en él. La razón es que mi programa no puede eliminar un archivo sin tener que ejecutarse como administrador. Y sí, una forma sencilla de resolver esto sería editar las propiedades del archivo ejecutable para que utilice el UAC para iniciar como administrador, pero tengo que distribuir el código fuente para que mis revisores lo compilen y quería ahorrarles la molestia.

Cualquier comentario, solución, etc., será apreciado. Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Iniciar un programa C en modo administrador en Windows

    Si tu programa C requiere privilegios de administrador, existen varios métodos para ejecutarlo como administrador:

    1. Usando un archivo manifiesto: Una forma de iniciar el programa como administrador es agregar un archivo manifiesto a la aplicación. En él, especifica que el programa requiere privilegios de administrador. Esto se puede hacer creando un archivo llamado tuarchivo.exe.manifest junto al archivo exe compilado con el siguiente contenido:
    <?xml version="1.0" encoding="utf-8"?>
    <assembly manifestversion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
        <trustinfo xmlns="urn:schemas-microsoft-com:asm.v2">
            <security>
                <requestedprivileges>
                    <requestedexecutionlevel level="requireAdministrator" uiaccess="false"></requestedexecutionlevel>
                </requestedprivileges>
            </security>
        </trustinfo>
    </assembly>
    
    1. Usando el comando “runas”: Puedes usar el comando “runas” para iniciar tu programa como administrador desde la línea de comandos. Simplemente abre el símbolo del sistema con privilegios de administrador y ejecuta el siguiente comando:
    runas /user:Administrador tuarchivo.exe
    
    1. Usando ShellExecute: La función ShellExecute se puede utilizar para iniciar una aplicación con privilegios elevados. En Windows, se mostrará el cuadro de diálogo UAC para solicitar el consentimiento del usuario para ejecutar el programa con privilegios de administrador. Aquí tienes un ejemplo de cómo usar ShellExecute en tu código C:
    #include <windows.h>
    #include <shellapi.h>
    
    int main(void)
    {
        ShellExecute(NULL, "runas", "tuarchivo.exe", NULL, NULL, SW_SHOWNORMAL);
        return 0;
    }
    
    1. Usando una función personalizada: También puedes agregar una función personalizada a tu código C que verifique si el programa se está ejecutando con privilegios elevados, y si no es así, vuelva a iniciar el programa con privilegios elevados. Aquí tienes un ejemplo de cómo puede verse el código:
    #include <windows.h>
    #include <shellapi.h>
    
    BOOL IsUserAdmin(VOID)
    {
        BOOL bResult = FALSE;
        SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
        PSID AdministratorsGroup = NULL;
        if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, 
                                     DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, 
                                     &AdministratorsGroup))
        {
            if (!CheckTokenMembership(NULL, AdministratorsGroup, &bResult))
            {
                bResult = FALSE;
            }
            FreeSid(AdministratorsGroup);
        }
        return bResult;
    }
    
    int main(void)
    {
        if (!IsUserAdmin())
        {
            WCHAR szPath[MAX_PATH];
            if (GetModuleFileName(NULL, szPath, ARRAYSIZE(szPath)))
            {
                SHELLEXECUTEINFO sei = { sizeof(sei) };
                sei.lpVerb = L"runas";
                sei.lpFile = szPath;
                sei.hwnd = NULL;
                sei.nShow = SW_SHOWNORMAL;
                if (!ShellExecuteEx(&sei))
                {
                    return 1;
                }
                return 0;
            }
            else
            {
                return 1;
            }
        }
        // tu lógica de programa aquí
        return 0;
    }
    

    Estas son algunas de las formas de iniciar un programa C en modo administrador en Windows. Elige el método que mejor se adapte a tus necesidades y requisitos.</shellapi.h></windows.h></shellapi.h></windows.h>

Comments are closed.