No ho capito benissimo.
"argument" non è una 'protezione' come molti qui credono - è soltanto l'inglese di "argomento". Avviando un programma è possibile passargli degli argomenti 'da linea di comando'.
Ad esempio il "ping" è un programma. Se da prompt dei comandi si da "ping google.com" quel "google.com" è un argomento inviato al programma ping.
Quello che generalmente viene applicato come 'protezione' (decisamente scarsa) è quello di modificare il programma da avviare (metin2.exe) in modo che: a) prelevi l'argomento da linea di comando; b) controlli che l'argomento sia uguale ad un certo valore scelto. Poi nel programma chiamante (l'autopatcher) viene avviato il programma da chiamare passandogli l'argomento scelto.
Questo però non impedisce all'utente di avviare il programma anche senza l'autopatcher. Infatti è sufficiente avviare il programma con "metin2.exe <argomento>" e il programma si avvia senza problemi.
Anche prendere l'argomento è banale - ci sono 3 modi, tutti semplicissimi:
1. Ottenere l'argomento dal programma da avviare tramite reversing (o debuggando il programma e ottenendolo dal risultato della chiamata di GetCommandLine oppure, senza che sia necessario un debug, prendendo quello già necessariamente salvato come costante dentro il programma);
2. Ottenere l'argomento dall'autopatcher tramite reversing (tra l'altro, dato che solitamente gli autopatcher vengono scritti in .NET, è ancora più banale);
3. Semplicemente utilizzare uno dei tanti software per Windows per vedere con quale CommandLine è stato creato un processo (roba da 5 secondi).
Impedire all'utente di avviarlo, come l'autore del topic ha chiesto, è impossibile. E questo "argument" come viene chiamato è bypassabile anche da uno scimpanzé ubriaco.
Si perfettamente quello che voglio fare
Il problema è che anche così non risolvi nulla: risolvi solo che non si avvia al doppio click, ma basta dare "metin2.exe <argomento>" e si avvia subito.