سلام
اگر ساختار فایل ها سادس و نیاز به بانک نیست می تونید فایل های exe رو درون برنامه Resource کنید و از طریق 1 برنامه همه رو از درون خودش اجرا کنید
از توجه شما ممنونم.
نه همه فایل به یک بانک مشترک دسترسی دارن.
یه راه حل ساده ولی غیره اصولی و مهندسی به ذهن رسیده:
که همه کلاس ها و فرم های پروزه های دیگر رو درون یک پروژه اصلی بریزم
که کار زیاد جالب نمی شه چون به یک عالمه متغییر تعریف کردن و کدنویسی نیاز داره
نظر شما چیه اگه راه حلی نداره یه جوری با این روش به خواستم برسم.
سلام برای این که چندتا exe رو درون یک exe قرار بدید باید اون هارو بصورت ریسورس دربیارید و با یکسری کد در زمان اجرا فایل موردنظر رو استخراج کنید و بعد از اتمام کار دوباره حذفش کنید
کد به نقل از ایمان مدائنی
------------------------------
یک فایل Resource به پروژه خودتون اضافه کنید و از دکمه منو شکل Add resource گزینه File را انتخاب کنید و فایل اجرایی مورد نظر را به پروژه اضافه کنید. سپس روی فایل کلیک کنید و وقتی به مشخصات آن دسترسی پیدا کردید، مشخصه Build action آن را بر روی Embedded Resource تنظیم کنید. حالا کلاسی شبیه به کلاس زیر را برای استخراج و اجرای فایل exe مورد نظر احتیاج خواهید داشت :
public class ResourceExtractor
{
/// <summary>
/// Extract an resource to a file
/// </summary>
/// <param name="resourcePath">Path to resource</param>
/// <param name="destPath">Destination file path</param>
public void Extract(string resourcePath, string destPath)
{
var stream = GetType().Assembly.GetManifestResourceStream(resou rcePath);
if (stream != null)
{
var bytes = new byte[Convert.ToInt32(stream.Length)];
stream.Read(bytes, 0, bytes.Length);
File.WriteAllBytes(destPath, bytes);
}
}
/// <summary>
/// Execute a process and returns it's id
/// </summary>
/// <param name="process">Process info to run</param>
/// <returns>Process id for another porpuses</returns>
public int Run(ProcessStartInfo process)
{
return Process.Start(process).Id;
}
/// <summary>
/// Kill a process by the given id
/// </summary>
/// <param name="procId">Process id to kill</param>
public void KillProcess(int procId)
{
Process.GetProcessById(procId).Kill();
}
}
public class ResourceExtractor
{
/// <summary>
/// Extract an resource to a file
/// </summary>
/// <param name="resourcePath">Path to resource</param>
/// <param name="destPath">Destination file path</param>
public void Extract(string resourcePath, string destPath)
{
var stream = GetType().Assembly.GetManifestResourceStream(resou rcePath);
if (stream != null)
{
var bytes = new byte[Convert.ToInt32(stream.Length)];
stream.Read(bytes, 0, bytes.Length);
File.WriteAllBytes(destPath, bytes);
}
}
/// <summary>
/// Execute a process and returns it's id
/// </summary>
/// <param name="process">Process info to run</param>
/// <returns>Process id for another porpuses</returns>
public int Run(ProcessStartInfo process)
{
return Process.Start(process).Id;
}
/// <summary>
/// Kill a process by the given id
/// </summary>
/// <param name="procId">Process id to kill</param>
public void KillProcess(int procId)
{
Process.GetProcessById(procId).Kill();
}
}
با استفاده از کلاس بالا براحتی می تونید یک فایل exe رو از ریسورس های پروژه بیرون بکشید و اجرا کنید و با استفاده از Id اون، مثلاً در هنگام خروج از برنامه خودتون، اون برنامه رو هم ببندید. یک مثال از استفاده این کلاس :
var resExtractor = new ResourceExtractor();
var destPath = Environment.GetFolderPath(Environment.SpecialFolde r.Windows) + "file.exe";
resExtractor.Extract("Farasun.file.exe",destPath);
int procId = resExtractor.Run(new ProcessStartInfo(destPath));
درمثال فوق به جای Farasun از فضای نام پروژه خودتون استفاده کنید. هنگام بسته شدن برنامه خودتون ، با استفاده از procId و متد Kill کلاس فوق می تونید برنامه ای که باز کردید را از حافظه خارج کنید و بعد از اون هم اگر نیاز هست، فایل مورد نظر را از پوشه ویندوز حذف کنید.
سلام برای این که چندتا exe رو درون یک exe قرار بدید باید اون هارو بصورت ریسورس دربیارید و با یکسری کد در زمان اجرا فایل موردنظر رو استخراج کنید و بعد از اتمام کار دوباره حذفش کنید
کد به نقل از ایمان مدائنی
------------------------------
یک فایل Resource به پروژه خودتون اضافه کنید و از دکمه منو شکل Add resource گزینه File را انتخاب کنید و فایل اجرایی مورد نظر را به پروژه اضافه کنید. سپس روی فایل کلیک کنید و وقتی به مشخصات آن دسترسی پیدا کردید، مشخصه Build action آن را بر روی Embedded Resource تنظیم کنید. حالا کلاسی شبیه به کلاس زیر را برای استخراج و اجرای فایل exe مورد نظر احتیاج خواهید داشت :
public class ResourceExtractor
{
/// <summary>
/// Extract an resource to a file
/// </summary>
/// <param name="resourcePath">Path to resource</param>
/// <param name="destPath">Destination file path</param>
public void Extract(string resourcePath, string destPath)
{
var stream = GetType().Assembly.GetManifestResourceStream(resou rcePath);
if (stream != null)
{
var bytes = new byte[Convert.ToInt32(stream.Length)];
stream.Read(bytes, 0, bytes.Length);
File.WriteAllBytes(destPath, bytes);
}
}
/// <summary>
/// Execute a process and returns it's id
/// </summary>
/// <param name="process">Process info to run</param>
/// <returns>Process id for another porpuses</returns>
public int Run(ProcessStartInfo process)
{
return Process.Start(process).Id;
}
/// <summary>
/// Kill a process by the given id
/// </summary>
/// <param name="procId">Process id to kill</param>
public void KillProcess(int procId)
{
Process.GetProcessById(procId).Kill();
}
}
public class ResourceExtractor
{
/// <summary>
/// Extract an resource to a file
/// </summary>
/// <param name="resourcePath">Path to resource</param>
/// <param name="destPath">Destination file path</param>
public void Extract(string resourcePath, string destPath)
{
var stream = GetType().Assembly.GetManifestResourceStream(resou rcePath);
if (stream != null)
{
var bytes = new byte[Convert.ToInt32(stream.Length)];
stream.Read(bytes, 0, bytes.Length);
File.WriteAllBytes(destPath, bytes);
}
}
/// <summary>
/// Execute a process and returns it's id
/// </summary>
/// <param name="process">Process info to run</param>
/// <returns>Process id for another porpuses</returns>
public int Run(ProcessStartInfo process)
{
return Process.Start(process).Id;
}
/// <summary>
/// Kill a process by the given id
/// </summary>
/// <param name="procId">Process id to kill</param>
public void KillProcess(int procId)
{
Process.GetProcessById(procId).Kill();
}
}
با استفاده از کلاس بالا براحتی می تونید یک فایل exe رو از ریسورس های پروژه بیرون بکشید و اجرا کنید و با استفاده از Id اون، مثلاً در هنگام خروج از برنامه خودتون، اون برنامه رو هم ببندید. یک مثال از استفاده این کلاس :
var resExtractor = new ResourceExtractor();
var destPath = Environment.GetFolderPath(Environment.SpecialFolde r.Windows) + "file.exe";
resExtractor.Extract("Farasun.file.exe",destPath);
int procId = resExtractor.Run(new ProcessStartInfo(destPath));
درمثال فوق به جای Farasun از فضای نام پروژه خودتون استفاده کنید. هنگام بسته شدن برنامه خودتون ، با استفاده از procId و متد Kill کلاس فوق می تونید برنامه ای که باز کردید را از حافظه خارج کنید و بعد از اون هم اگر نیاز هست، فایل مورد نظر را از پوشه ویندوز حذف کنید.
دست شما درد نکنه ولی کار جالبی نیست .یک فایل Resource به پروژه خودتون اضافه کنید
چون تعداد ارجاعات به این فایل ها زیاد هستش و هر دفعه این عملیات انجام دادن از سرعت برنامه کم می کنه.
و بلا اخره یه فایل EXE استخراج می شه که برای کراکرهای نرم افزار خیلی به درد بخور می شه و کدهای برنامه رو بیرون می کشن.
دیگه نا امید شدم و فکر کنم باید همه پروژه ها رو در قابل یه پروژه واحد انجام بدم
سلام
فکر کنم شما باید از نرم افزارهایی که عملیات Merge را انجام میدن استفاده کنید که اغلب عمل مبهم سازی را هم انجام میدن.
خود میکروسافت هم یک نرم افزار ادغام کننده داره که فقط کارش ادغام و پک کردنه فایلهاست که من استفاده نکردم.اسمش یادم نیست سرچ کنید پیدا میکنید.
نرم افزارهای دیگری مثل SmartAssembly و Crypto Obfuscator هم هست که هم کار مبهم سازی یا Dotfuscator را انجام میدن و هم کار ادغام یا همون Merge
بنده قبلا یک پروژه تحت پایگاه داده که از چندین فایل تشکیل میشد را توسط نرم افزار Crypto Obfuscator مبهم و پک کردم.سرعت برنامم هم بالاتر برد چون قابلیت فشرده سازی هم داره!!!
البته فایلهایی که من ادغام کردم dll بودن که توی سه تا فایل exe مشترک بود و همچنین از کلید خصوصی هم استفاده کردم که نرم افزار Crypto Obfuscator برای همه ی اینها امکاناتی داره.
البته حواستون باشه که نسخه بدون کرکش روی فایل اجرائیتون محدودیت زمانی میذاره!!!