PDA

View Full Version : اضافه کردن فایل باینری به سولوشن و اجرای آن



ciph3r
چهارشنبه 12 مهر 1396, 22:04 عصر
با سلام و خسته نباشید .
من یک پروژه دارم که کد نویسی سی پلاس پلاس هست .
حالا فرض کنید من 1 فایل .exe جداگانه دارم که می خوام به پروژه داخل ویژوال استادیو اضافه کنم و در نهایت فایل اصلی کامپایل شده در هنگام اجرا اون فایل .exe را هم اجرا کنه.

مثال میزنم .
فکر کنید من یه برنامه نوشتم که کار شبکه می کنه .
و این برنامه به صورت پروژه سی پلاس پلاس تو ویژوال استادیو باز کردم و در حال کد زدنم.
حال پروژه نیاز به آی پی اسکنر داره . گشتم دیدم قبلا یکی نوشته و کامند لاین هست ولی .exe
می خوام این .exe رو به پروژه خودم اضافه کنم که در نهایت برنامه کار شبکه هنگام فعالیت خود این آی پی اسکنر را کامند بده و اجرا هم بکنه.

آیا راه حلی هست ؟
ممنون میشم بابت راهنمایی

ciph3r
جمعه 14 مهر 1396, 02:39 صبح
با سلام و خسته نباشید .
من یک پروژه دارم که کد نویسی سی پلاس پلاس هست .
حالا فرض کنید من 1 فایل .exe جداگانه دارم که می خوام به پروژه داخل ویژوال استادیو اضافه کنم و در نهایت فایل اصلی کامپایل شده در هنگام اجرا اون فایل .exe را هم اجرا کنه.

مثال میزنم .
فکر کنید من یه برنامه نوشتم که کار شبکه می کنه .
و این برنامه به صورت پروژه سی پلاس پلاس تو ویژوال استادیو باز کردم و در حال کد زدنم.
حال پروژه نیاز به آی پی اسکنر داره . گشتم دیدم قبلا یکی نوشته و کامند لاین هست ولی .exe
می خوام این .exe رو به پروژه خودم اضافه کنم که در نهایت برنامه کار شبکه هنگام فعالیت خود این آی پی اسکنر را کامند بده و اجرا هم بکنه.

آیا راه حلی هست ؟
ممنون میشم بابت راهنمایی


واقعا کسی نیست که جواب بنده رو بده ؟

negative60
جمعه 14 مهر 1396, 16:49 عصر
میتونید از ریسورس استفاده کنید اگه سرچ کنید کلی‌ مطلب در موردش هست

hamedBB
دوشنبه 17 مهر 1396, 19:45 عصر
سلام
دو راه دارید (راه اول رو اصلا پیشنهاد نمیکنم و صرفا چهت اطلاع رسانی میگم) :
1- استفاده از متد system که یک command به عنوان ورودی میگیره، که اون command میتونی دستور اجرای برنامه شما باشه به همراه لیست پارامترهاش.
2- از اونجایی که گفتید .exe مسلما روی ویندوز دارید کار می کنید و این جواب هم مخصوص ویندوز هست (بر خلاف روش اول). از تابع زیر استفاده کنید :
#include <Windows.h>

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

// set the size of the structures
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

// start the program up
CreateProcess( lpApplicationName, // the path
argv[1], // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi // Pointer to PROCESS_INFORMATION structure (removed extra parentheses)
);
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}

توجه داشته باشید که پارامتر lpApplicationName شامل مسیر فایل اجرایی شما هم هست نه فقط نام اون.
اگر توضیح بیشتری نیاز داشتید در خدمتم.
منبع : https://stackoverflow.com/questions/15435994/how-do-i-open-an-exe-from-another-c-exe
موفق باشید.

ciph3r
سه شنبه 18 مهر 1396, 03:34 صبح
سلام
دو راه دارید (راه اول رو اصلا پیشنهاد نمیکنم و صرفا چهت اطلاع رسانی میگم) :
1- استفاده از متد system که یک command به عنوان ورودی میگیره، که اون command میتونی دستور اجرای برنامه شما باشه به همراه لیست پارامترهاش.
2- از اونجایی که گفتید .exe مسلما روی ویندوز دارید کار می کنید و این جواب هم مخصوص ویندوز هست (بر خلاف روش اول). از تابع زیر استفاده کنید :
#include <Windows.h>

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

// set the size of the structures
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

// start the program up
CreateProcess( lpApplicationName, // the path
argv[1], // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi // Pointer to PROCESS_INFORMATION structure (removed extra parentheses)
);
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}

توجه داشته باشید که پارامتر lpApplicationName شامل مسیر فایل اجرایی شما هم هست نه فقط نام اون.
اگر توضیح بیشتری نیاز داشتید در خدمتم.
منبع : https://stackoverflow.com/questions/15435994/how-do-i-open-an-exe-from-another-c-exe
موفق باشید.

با تشکر و سپاسگزارم بابت پاسختون.
فکر کنم از عرایض بنده متوجه نشدید .
بنده گفتم که سولوشن من کنسول و اگه بیلد بشه قراره .exe بده بیرون .
خب تا اینجا کی .
بعدا ی خواهم فایل .exe دیگری که قبلا توسط شخص دیگه ای بیلد شده (من فقط .exe را دارم) با سولوشن خودم ادغام کنم و در نهایت سولوشن 1 فایل .exe بیلد کنه که به غیر از کارهای خودش اون فایل که داخل خودشه اونو هم اجرا کنه .
فایل رو بدم به کامپایلر و همراه برنامم کامپایل کنه تقریبا .

hamedBB
سه شنبه 18 مهر 1396, 03:51 صبح
با تشکر و سپاسگزارم بابت پاسختون.
فکر کنم از عرایض بنده متوجه نشدید .
بنده گفتم که سولوشن من کنسول و اگه بیلد بشه قراره .exe بده بیرون .
خب تا اینجا کی .
بعدا ی خواهم فایل .exe دیگری که قبلا توسط شخص دیگه ای بیلد شده (من فقط .exe را دارم) با سولوشن خودم ادغام کنم و در نهایت سولوشن 1 فایل .exe بیلد کنه که به غیر از کارهای خودش اون فایل که داخل خودشه اونو هم اجرا کنه .
فایل رو بدم به کامپایلر و همراه برنامم کامپایل کنه تقریبا .

سلام مجدد.
تا جایی که من میدونم امکان همچین کاری وجود نداره و اگر سازنده اون فایل میخواست همچین اجازه ای رو بده سورس کد رو منتشر میکرد. اگر اون برنامه ای که میفرمایید صرفا یک سرویس خاص رو انجام میده میتونید اون رو به عنوان ریسورس به برنامه اضافه کنید و در برنامتون اجراش کنید همونطور که در پاسخ اول گفتم. که ریسورس کردنش هم به معنی ناپدید شدنش نیست مسلما.

موفق باشید.

ciph3r
پنج شنبه 20 مهر 1396, 02:51 صبح
سلام مجدد.
تا جایی که من میدونم امکان همچین کاری وجود نداره و اگر سازنده اون فایل میخواست همچین اجازه ای رو بده سورس کد رو منتشر میکرد. اگر اون برنامه ای که میفرمایید صرفا یک سرویس خاص رو انجام میده میتونید اون رو به عنوان ریسورس به برنامه اضافه کنید و در برنامتون اجراش کنید همونطور که در پاسخ اول گفتم. که ریسورس کردنش هم به معنی ناپدید شدنش نیست مسلما.

موفق باشید.

اشکال نداره که نشان داده بشه یا کنارش .
حتی میتونه از اول 1 فایل باشه ولی هنگام اجرا اون فایل رو بده بیرون از خودش .
شما فرض کنید یک cmd.exe هست که تو برنامم می خوام رانش کنم و بهش کامند بدم . (این فقط مثال و شما فرض کنید تو ویندوز cmd.exe وجود نداره به صورت پیشفرض)
dمن به اجرای اون فایل نیاز دارم و نمیخوام کد نویسی جوری بشه که از اینترنت دانلود و اجرا کنه . چون شابد برنامه اصلی در شبکه لوکال اجرا بشه و نتونه اون برنامه رو دانلود کنه از اینترنت . می خوام تو آفلاین هم کنارش باشه ولی اولین فایل که اجرا میشه 1 فایل باشه.بعدا اگه فایل های دیگه کنارش باشه یا تولید کنه مهم نیست.

خارج از موضوع : من تو همین سوال بالا شنیدم که با استفاده از فایل demo.dat میشه این کار رو کرد.