Bueno los de excel to exe y demás no creo que dieran buen resultado (porque lo que hacen en descomprimir el archivo excel en una carpeta temporal, que se podría localizar y copiar y abrirlo) por lo que me sumo al hilo de las respuestas, haría falta ofuscar el código o por lo menos el texto 'ruta/archivo.ini' para que no fuera legible con un editor, tipo:
Esta función es una forma fácil para encriptar un texto.
La misma función sirve para desencriptar.
Function Encriptar(Texto) As Variant
For x = 1 To Len(Texto): Encriptar = Encriptar & Chr(255 - Asc(Mid(Texto, x, 1))): Next
End Function
[/CODE]
Digamos que se podría llamar solo la primera vez para que nos encriptara la variable 'texto' que contendría la ruta/archivo.ini y que nosotros después la utilizaríamos para comprobar si ciertamente está ese archivo.ini, pj;
ruta="gjugfrhjjvrewwuiok" ;el texto cifrado
Llamamos a la función Encriptar(ruta) para que la desencripte y continuamos el código...
Const archivoInicial = ruta
..
.
...
Como vemos en ningún momento aparece el nombre de el archivo ni la ruta.
Y si procuramos no dar pistas ( en lo de la detección del archivo) mejor ; podemos escribir estas partes del código ' lo ponemos como letra's ' esto es solo un ejemplo no es código bien escrito;
Jkhi ="gjugfrhjjvrewwuiok"
Func iyrg(jkhi)
Cons xfd = jkhi
If xfd = true then gfdhj
...
Etc
En vez de;
ruta="gjugfrhjjvrewwuiok"
Encriptar(ruta)
Cons ArchivoInicial = ruta
.....
If NoEstaElArchivo then WindowClose
...
Eso seria ofuscar un poco el código, aunque lo ideal seria distribuir esas partes de el codigo por todo el documento y y ofuscarlo un poco más ej; abc= ddea
....
...
ddea=gikj
....
Cons gikj = open
...
En vez de poner directamente abc = open
Bueno y para la colocación del archivo ini se puede utilizar alguna función vba para la creación del mismo con la misma técnica de cifrar el texto de la ruta/archivo algo así como;
Func encriptar(RUTA)
.....
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(RUTA, True)
Como vemos se crea la primera vez el archivo de marras sin saber de su paradero.
Y podemos rematar añadiendo una funcion comprobación de checksum por lo menos en la parte de el codigo ejecutable para que no nos modifiquen el documento una vez creado vallan que nos añadan una linea algo como
Print RUTA o nos cambien un If RUTA= then , por un If RUTA<> then
Lo ideal sería crear una macro solo para este acometido es decir llamarla para que cojiera el documento recién creado e incrustara el código y checksum automáticamente.
Bajo mi punto de vista yo creo que es mejor a la antigua usanza; tu me pagas yo te mando el serial,
Hay funciones en vba para cojer el id único de el equipo;
Tan sencillo como;
Si es la primVez entonces
CapturarID(idd) : MsgBox 'su id es xxxx suministre lo a su distribuidor para que le asigne su serial'
InputText 'introduzca su serial'; seri
Desencript(seri); orig
Si orig = idd entonces guardar(seri) ' sea en archivo o en el registro de win.
Si no es primvez entonces:
Cuando se ejecuta el docu;
Load(seri) ' ya sea por arch o reg de win ( el id cifrado)
CapturarId(idd)
Si seri = idd entonces abreDocu
Como cada pc tiene una id distinta el documento no se abrirá si no coinciden ( comparacion de su id con su propia id cifrada suministrada por ti) solo es cuestión de crear una macro aparte que suministrandote una id te la cifre para dársela al que le vendiste el docu., este método junto con la verificación del checksum para no seguir con el docu abierto en caso de modificación de código, bajo mi opinión en la mejor forma de protegerlo sin mucha complicación, solo es unas cuantas líneas de código.