شرمنده دوستان چطوری میشه یک فایل exe که با سی شارپ نوشتیم را فقط بشه ار داخل یک برنامه دبگه اجرا کرد وبصورت مستقل اجرا نشه؟
شرمنده دوستان چطوری میشه یک فایل exe که با سی شارپ نوشتیم را فقط بشه ار داخل یک برنامه دبگه اجرا کرد وبصورت مستقل اجرا نشه؟
با Win32 API
کد رو امتحام کنید ببنید اون چیزی هست که می خواید؟
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Process p = Process.Start("notepad.exe");
Thread.Sleep(500); // Allow the process to open it's window
SetParent(p.MainWindowHandle, panel1.Handle);
}
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
}
}
دوست خوب من مخوام یک برنامه که نوشتم را داخل یک برنامه دیگم اجرا کنم وبرنامه اول فقط از داخل برنامه دوم اجرا بشه وبه تنهای اجرا نشه و پیغام بده برنامه موردنظر از داخل نرم افزار قابل اجراست
شما می تونید با پارامتر کار بکنید....از برنامه اصلی یه پارامتر به برنامه دوم بفرستید و در هنگام اجرای برنامه دوم چک کنید که پارامتر مورد نظرتون ست شده یا نه...
یه نمونه کد ساده....
اجرای برنامهB توسط A با ارسال پارامتر به برنامه
System.Diagnostics.Process.Start(exepath,parameter s);
این قسمت هم توی program.cs برنامه B
static void Main(string[]argparamerStrings)
{
if (argparamerStrings.Length == 0)
{
FarsiMessage.Show("این برنامه بایستی توسط نرم افزار ......... اجرا گردد", "", FarsiMessageBoxButtons.OK, FarsiMessageBoxIcons.Stop);
Application.Exit();
return;
}
}
سلام من طبق فرمایش دوستمونم تنجام دادم ولی نمیشه چرا
دقت کنید داخل پروژه ای که میخاید بصورت مستقیم اجرا نشه باید کدهاش رو به این صورت تغییر بدید
دقت کنید که تابع main بصورت پیشفرض متغییری براش تعریف نشده شما باید تعریف کنید یکم کدها رو با دقت بخونید.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication3
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] argparamerStrings)
{
if(argparamerStrings.Length == 0)
{
MessageBox.Show("OoopS!");
Application.Exit();
} else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form1());
}
}
}
}
داخل پروژه ای که میخاید این پروژه رو اجرا کنید کافیه بنویسید
System.Diagnostics.Process.Start(Application.Start upPath + "\\WindowsFormsApplication3.exe", "update");
ممنون از پاسخ شما
حلا اگه بخوام یکم پیشرفته تر کنم که وقتی که پا رامتر ارسال میشه چک کنم اگه پارامتر ارسالی مساوی با پارامتر من هست برنامه اجرا بشه باید چکار کنم؟
من این کد نوشتم ولی جواب نمیده
static void Main(string[] args)
{
if (args.Length == 0)
{
MessageBox.Show("فایل ها", "پیام");
Application.Exit();
return;
}
else
{
MainProgramPath = args[1];
switch (args[0])
{
case "ali110":
Application.Run(new Form1());
break;
default:
Application.Exit();
break;
}
}
میتونید از همون if و else if ها استفاده کنید به این صورت در واقع شما فقط با این arg کار بکنید و از خاصیت های مختلفش استفده کنید از Lenghs ما برای فهمیدن اینکه ایا ارگومان خالی هست یا دارای مقداری هست استفاده می کنیم از Contain برای اینکه ببینیم ایا مقدار موردنظر ما داخلش هست یا ن استفاده می کنیم و به همین صورت باقی دستورات که موجود هستش
if(argparamerStrings.Contain("myparametr"))
{
MessageBox.Show("OoopS!");
Application.Exit();
} else if (argparamerStrings.Contain("myNewparametr"))
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form1());
{