Memory Access Violation

Beberapa hari ini ada kasus yang baru dan menarik yaitu membuka file gedebanget.exe ( >400MB ) dari “Browser” (PHP) di platform Sistem Operasi Windows 7. FYI, file exe tersebut berisi video dan animasi 3D.

Awalnya saya menggunakan exec(), shell_exec() dan system(), kemudian langsung memanggil file gedebanget.exe tersebut ataupun menggunakan batch file, namun hasilnya selalu sama yaitu muncul “Memory Access Violation”, analisa pertama karena mungkin karena memory yang terlalu kecil, yaitu 2 GB, penggunaan alokasi memory sebagai berikut:

- Apache + PHP + MySQL (Xammp) = 1 GB
- Shared VGA memory = 256 MB 

Belum lagi ditambah dengan aplikas-aplikasi lainnya, sedangkan file gedebanget.exe membutuhkan lebih banyak memory untuk melakukan rendering.

Lalu saya menambahkan RAM sebesar 2GB, jadi totalnya adalah 4GB, namun….hasilnya sama saja, peringatan “Memory Access Violation” muncul kembali.

Penambahan memory saya pikir memang harus dilakukan mengingat sumberdaya memory sebelumnya sangat terbatas, pertanyaan “kenapa masih muncul peringatan itu lagi?” mungkin karena file gedebanget.exe yang terlalu besar, karena ketika membuka notepad.exe, ternyata berjalan dengan normal.

“Finding the source of the problem”

Saya coba runut lagi proses pemanggilan file gedebanget.exe tersebut, yap.. PHP , kemudian dapet tautan berikut di php.net, di sana dijelaskan kalau kita ingin memanggil Aplikas GUI di platform Windows Vista, kita akan banyak menemukan masalah, karena ada fitur-fitur keamanan baru yang dipasang oleh Microsoft dari platform Windows Vista sampai sekarang (Windows 7).

Muncul analisa kalau Windows 7 membatasi penggunaan memory ketika dipanggil bukan dari Native Windows, misalnya aplikasi “windows explorer”. sebagai pengingat, file gedebanget.exe dipanggil melalui PHP dengan media “browser”.

Informasi berharga itu, memaksa saya untuk memanipulasi Windows 7 supaya file gedebanget.exe yang besarnya > 400 MB itu bisa berjalan, saya butuh “jembatan”.

“Jembatan” yang saya maksud adalah membuat file exe yang kecil, saya sebut dengan launcher.exe (mungkin sebaiknya “bridge” kali yah ?! :D ), launcher.exe akan dipanggil dari PHP menggunakan shell_exec() setelah itu launcher.exe akan memanggil file gedebanget.exe. 

launcher.exe saya buat menggunakan Adobe Flash karena relatif lebih mudah dan memang sudah terpasang di laptop (temans bisa menggunakan program lain untuk membuat exe, tidak mesti Flash). untuk Flash Langkah-langkahnya sebagai berikut:

  1. Buat lembar kerja baru di Flash
  2. masukkan script berikut di frame pertama:

    fscommand(“exec”, “gedebanget.exe”);
    fscommand(“quit”, “true”); 
    Baris pertama men-trigger file gedebanget.exe, sedangkan baris kedua menutup file launcher.exe agar tampilan di browser tidak terganggu.
     
  3. Simpan file FLA dengan nama “launcher.fla”
  4. Di Publish Settings, pastikan centangan “Windows Projector” dalam kondisi aktif.
  5. Publish

Setelah di-Publish, akan ada beberapa file yang terproduksi, salah satunya “launcher.exe”.

Agar file launcher.exe bisa dieksekusi oleh Flash, masukkan file gedebanget.exe ke dalam folder “fscommand”, jika belum ada folder “fscommand”, buat dulu yaaaahhh… jadi struktur filenya sebagai berikut:

- C:\launcher.exe
- C:\fscommand\gedebanget.exe 

Pada file PHP yang memanggil file launcher.exe, saya namakan “preview.php”, ketikkan script berikut:

shell_exec(“c:\\launcher.exe”);

Simpan, dan jalankan.

Windows 7, I BEAT YOU DOWN!

Blog comments powered by Disqus