PDA

View Full Version : اجرای برنامه A فقط با برنامه B به صورتی که برنامه A به طور مستقل قابل اجرا نباشد



HAMRAHSOFT.IR
چهارشنبه 17 تیر 1394, 13:26 عصر
شرمنده دوستان چطوری میشه یک فایل exe که با سی شارپ نوشتیم را فقط بشه ار داخل یک برنامه دبگه اجرا کرد وبصورت مستقل اجرا نشه؟

jeson_park
چهارشنبه 17 تیر 1394, 14:24 عصر
با 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);
}
}

HAMRAHSOFT.IR
چهارشنبه 17 تیر 1394, 14:49 عصر
دوست خوب من مخوام یک برنامه که نوشتم را داخل یک برنامه دیگم اجرا کنم وبرنامه اول فقط از داخل برنامه دوم اجرا بشه وبه تنهای اجرا نشه و پیغام بده برنامه موردنظر از داخل نرم افزار قابل اجراست

محمد رضا فاتحی
چهارشنبه 17 تیر 1394, 15:21 عصر
شما می تونید با پارامتر کار بکنید....از برنامه اصلی یه پارامتر به برنامه دوم بفرستید و در هنگام اجرای برنامه دوم چک کنید که پارامتر مورد نظرتون ست شده یا نه...
یه نمونه کد ساده....

اجرای برنامه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;
}
}

jeson_park
چهارشنبه 17 تیر 1394, 17:15 عصر
دوست خوب من مخوام یک برنامه که نوشتم را داخل یک برنامه دیگم اجرا کنم وبرنامه اول فقط از داخل برنامه دوم اجرا بشه وبه تنهای اجرا نشه و پیغام بده برنامه موردنظر از داخل نرم افزار قابل اجراست
من منظور شما رو متوجه شدم
شما می خواید برنامتون توسط یه برنامه مشخص صدا زده بشه و مستقیماً اجرا نشه
باید با Process.GetProcessesByName یا GetProcessById ب PID یا اسم پردازه برنامه B رو بدست بیارید و ببنید همون پردازه ای هست که شما می خواید یا نه یه پردازه دیگست

Helpco
سه شنبه 02 شهریور 1395, 19:01 عصر
سلام من طبق فرمایش دوستمونم تنجام دادم ولی نمیشه چرا

barnamenevisjavan
جمعه 05 شهریور 1395, 22:35 عصر
دقت کنید داخل پروژه ای که میخاید بصورت مستقیم اجرا نشه باید کدهاش رو به این صورت تغییر بدید
دقت کنید که تابع 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");

Helpco
دوشنبه 08 شهریور 1395, 18:51 عصر
دقت کنید داخل پروژه ای که میخاید بصورت مستقیم اجرا نشه باید کدهاش رو به این صورت تغییر بدید
دقت کنید که تابع 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;
}
}

barnamenevisjavan
سه شنبه 09 شهریور 1395, 08:50 صبح
میتونید از همون 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());
{