Rumah >pembangunan bahagian belakang >C++ >Cara Melancarkan Fail Boleh Laku Dengan Selamat dalam C : Mengapa CreateProcess() Adalah Pilihan Terbaik Anda?

Cara Melancarkan Fail Boleh Laku Dengan Selamat dalam C : Mengapa CreateProcess() Adalah Pilihan Terbaik Anda?

Linda Hamilton
Linda Hamiltonasal
2024-10-29 18:35:031128semak imbas

How to Launch Executable Files Securely in C  : Why CreateProcess() Is Your Best Choice?

Menggunakan CreateProcess() untuk Melancarkan Fail Boleh Laku

Dalam panduan ini, kami akan meneroka cara membuka fail boleh laku (.exe) dari dalam boleh laku C yang lain.

Kesalahan Menggunakan sistem()

Sebelum mendalami penyelesaian, adalah penting untuk menyerlahkan bahaya menggunakan fungsi sistem(). System() mempamerkan beberapa kelemahan:

  • Ia adalah ресурсоёмким, berpotensi memperlahankan program anda.
  • Ia menjejaskan keselamatan, kerana anda tidak mempunyai kawalan ke atas arahan yang dilaksanakan. Ini boleh menyebabkan program berniat jahat secara tidak sengaja menjalankan dengan keistimewaan pentadbir.
  • Ia sering dibenderakan sebagai ancaman keselamatan oleh perisian antivirus.

Menggunakan CreateProcess()

Sebaliknya system(), kami mengesyorkan menggunakan fungsi CreateProcess(). Fungsi ini membolehkan anda melancarkan fail boleh laku, mencipta proses bebas.

#include <windows.h>

VOID startup(LPCTSTR lpApplicationName)
{
  STARTUPINFO si;     
  PROCESS_INFORMATION pi;

  ZeroMemory( &amp;si, sizeof(si) );
  si.cb = sizeof(si);
  ZeroMemory( &amp;pi, sizeof(pi) );

  CreateProcess( lpApplicationName,   // executable path
                 argv[1],        // command line
                 NULL,           // process handle not inheritable
                 NULL,           // thread handle not inheritable
                 FALSE,          // no handle inheritance
                 0,              // no creation flags
                 NULL,           // parent's environment block
                 NULL,           // parent's starting directory 
                 &amp;si,            // STARTUPINFO structure
                 &amp;pi             // PROCESS_INFORMATION structure
                 );

  // Close process and thread handles. 
  CloseHandle( pi.hProcess );
  CloseHandle( pi.hThread );
}

Menyelesaikan Ralat

Ralat yang anda hadapi mungkin berpunca daripada fakta bahawa anda tidak menyatakan sepenuhnya laluan fail boleh laku. Pastikan anda memberikan laluan lengkap, termasuk nama fail.

Atas ialah kandungan terperinci Cara Melancarkan Fail Boleh Laku Dengan Selamat dalam C : Mengapa CreateProcess() Adalah Pilihan Terbaik Anda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn