Si, se puede hacer con mutex, archivo, memoria, registro, dde, linea de comandos o cualquier cosa que te permita crear un flag, tambien podrias ver que proceso lo ejecuto o usar CreateProcess y pasarle los flags o mil cosas mas, gracias por el dato.
Se puede hacer asi sin necesidad de usar gosub, con respecto al end no es recomendado para nada, aparte se supone que esta es la primer funcion asi que no tendria que haber nada cargado exepto el form de inicio.
Con respecto a las variables de entorno, son locales no globales
Bueno aca les dejo una mini clase para crear controles RichTextBox en tiempo de ejecucion, es muy simple pero viene ideal para EULA, Readme o Help files.
If UCase$(Right$(sPath, Len("VB6.EXE"))) = "VB6.EXE" Then Exit Function
podrias cambiarlo por If App.LogMode=0 then exit function <- Edite aca
2)
el buffer de GetModuleFileName de 128 me parece chico tendria que ser Private Const MAX_PATH As Long = 260 o ver que la funcion no retorne ERROR_INSUFFICIENT_BUFFER en cuyo caso tendras que aumentar el tamaño buffer
3)
Agregar nombre y descripcion en el manifest
4)
Soporte para Vista y sus diferentes manifest
5) Hay una error grande en el codigo, fijate que si no existe el manifest intenta crear uno si es xp, sino pasa de largo y reinicia la aplicacion de igual manera... y lo vuelve a hacer infinitamente