PDA

View Full Version : سوال: اجرا کردن یک فایل EXE در کامپیوتر کاربر توسط PHP !



siavashsay
شنبه 24 فروردین 1392, 10:41 صبح
دوستان یک فایل رو روی سیستم کاربر داریم و میدونیم کجاس !
حالا میخوام با یک لینک - Button یا هر چیزی که کاربر روی اون کلیک کرد اون فایل اجرا بشه !
چطور ممکنه ؟!
با تشکر

MMSHFE
شنبه 24 فروردین 1392, 10:43 صبح
روی هاستهای اشتراکی اکثراً دستور shell_exec یا exec رو بستن ولی اگه باز باشه، میتونید با فرستادن مسیر فایل بعنوان پارامتر به این دستور، اجراش کنید. البته این دستور هم فقط فایل رو از روی سرور اجرا میکنه. شما به هیچ عنوان به منابع سیستم کلاینت دسترسی ندارین. یعنی واقعاً اگه میشد، خودتون از فردا میومدین توی اینترنت؟

siavashsay
شنبه 24 فروردین 1392, 11:01 صبح
آخه قضیه من فرق داره !
من VPS دارم و تنظیمات Wamp دست خودم هست ! یک برنامه به کاربر میدم که به flash Player نیاز داره !
کاربر برنامه رو دانلود میکنه ! برنامه فقط یک Web Browser ساده هست که با C# نوشته شده که صفحات سایت منو توش لود میکنه !
حالا میخوام توی صفحه Flash Player رو چک کنه اگر موجود نبود یک Button به کاربر بده که فایل Flash Player رو که همراه برنامه من دانلود کرده و مشخص هست که توی کدوم درایو هست ( با برنامه Install Shield مسیر دادم )
رو اجرا کنه !
حالا با PHP هم نشد مهم نیست - با JS - Jquery اصلا هر چی ! فقط اون فایل Flash Player Installer رو اجرا کنه !
همین !
با تشکر جناب شهرکی

MMSHFE
شنبه 24 فروردین 1392, 11:11 صبح
اگه سورس کد Web Browser رو دارین، ازطریق همون برنامه Flash Player رو نصب کنید. اگر هم نیست، یک لینک با href شبیه file:///C:/Program Files/Browser/FPInstaller.exe بهش بدین. با کلیک کردن روی این لینک، فایل اجرا میشه. مسیرش هم روی کامپیوتر کلاینته.

siavashsay
شنبه 24 فروردین 1392, 11:16 صبح
والله Web Srouce رو که دارم - یعنی خودم نوشتم - البته اونم با آموزشهای توی اینترنت چون با Visual C# آشنایی کامل ندارم و نمیدنم چطوری باید اون رو اجرا کنم !
اما اون لینکی که دادید رو تست کردم نشد !
من یه همچین چیزی دارم :

<a href="file:///D:/flp/flpie.exe">click</a>
اما چیزی اجرا نشد !

siavashsay
شنبه 24 فروردین 1392, 11:21 صبح
ضمنا یک نکته که واسم مهمه اینه که فایل اجرا بشه اما نه توی حالت دانلود ! چون توی Browser وقتی یک فایل exe داده میشه انگار میخواد اون رو دانلود کنه ! اما من میخوام فایل رو اجرا کنه - دقیقا مثل اینکه روش کلیک شده !
آبا امکان پذیر هست این جناب شهرکی ؟!

MMSHFE
شنبه 24 فروردین 1392, 11:22 صبح
نمیدونم والا قاعدتاً باید بشه ولی اگه سورس کد رو دارین، توی #C با دستورات زیر میتونید کاری که میخواین رو انجام بدین:

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C D:\flp\flpie.exe";
process.StartInfo = startInfo;
process.Start();

البته اگه همون اول کدتون ;using System.Diagnostics رو اضافه کنید، دیگه نیازی نیست اینقدر توی کد تکرارش کنید.
مثلاً این راه خلاصه تره:

using System.Diagnostics;
//...
Process.Start("D:\flp\flpie.exe");

siavashsay
شنبه 24 فروردین 1392, 11:32 صبح
از این کد هم استفاده کردم اما باز هم خطا میده - این کد بنده هست :
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;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://localhost/test/fpc/chk.html");
Process.Start("D:\flp\flpie.exe");
}
}
}

اما موقعی که Run میکنم یک خطا میده
Win32Exeption was unhandled

MMSHFE
شنبه 24 فروردین 1392, 11:40 صبح
کلاً بحث #C شد! اینو امتحان کنید ببینیم خطاش چیه؟

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;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://localhost/test/fpc/chk.html");
try
{
Process.Start("D:\flp\flpie.exe");
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
}
}

MMSHFE
شنبه 24 فروردین 1392, 11:41 صبح
با اجازه این تاپیک رو به تالار #C منتقل میکنم.

siavashsay
شنبه 24 فروردین 1392, 11:50 صبح
اصلا اجرا نمیکنه و اینو میگه تو error هاش :
Error 1 A local variable named 'e' cannot be declared in this scope because it would give a different meaning to 'e', which is already used in a 'parent or current' scope to denote something else c:\users\siavash\documents\visual studio 2010\Projects\WindowsFormsApplication3\WindowsForm sApplication3\Form1.cs 27 30 WindowsFormsApplication3

siavashsay
شنبه 24 فروردین 1392, 11:52 صبح
کل سورس شما رو هم گذاشتم اینو داد :
Error 1 'WindowsFormsApplication3.Form1.Dispose(bool)': no suitable method found to override c:\users\siavash\documents\visual studio 2010\Projects\WindowsFormsApplication3\WindowsForm sApplication3\Form1.Designer.cs 14 33 WindowsFormsApplication3

MMSHFE
شنبه 24 فروردین 1392, 11:54 صبح
خوب پارامتر بلاک catch رو اسمش رو عوض کنید (مثلاً بگذارین caught) و توی متد MessageBox.Show هم از همون اسم استفاده کنید.

siavashsay
شنبه 24 فروردین 1392, 11:59 صبح
اگر منظورتون اینطوری میشه :

catch (Exception caught)
{
MessageBox.Show(caught.Message);
}
این خطا رو میده و اجرا نمیکنه :
Error 1 The type or namespace name 'Form1' could not be found (are you missing a using directive or an assembly reference?) c:\users\siavash\documents\visual studio 2010\Projects\WindowsFormsApplication3\WindowsForm sApplication3\Program.cs 18 33 WindowsFormsApplication3

MMSHFE
شنبه 24 فروردین 1392, 12:06 عصر
سورس کد Program.cs خودتون رو بگذارین ببینیم چی به چیه؟ احتمالاً اونجا ;using Windows.Forms رو جا انداختین. اگه میشه کدش رو بگذارین ببینیم مشکل از کجاست. این فایل مشکل نداره. خطا مربوط به Program.cs هست.

siavashsay
شنبه 24 فروردین 1392, 12:08 عصر
کل کد بنده این هست الان :

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;


namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://localhost/test/fpc/chk.html");
try
{
Process.Start("D:\flp\flpie.exe");
}
catch (Exception caught)
{
MessageBox.Show(caught.Message);
}
}
}
}

MMSHFE
شنبه 24 فروردین 1392, 12:09 عصر
دوست عزیز، میگم Program.cs رو بگذارین. این که کد Form1.cs هست.

siavashsay
شنبه 24 فروردین 1392, 12:18 عصر
والله 2 تب بیشتر ندارم ! یکی که تب visual هست و اون یکی هم تب Code هست که اونم گذاشتم !
program.cs رو از کجا باید پیدا کنم ؟!

siavashsay
شنبه 24 فروردین 1392, 12:20 عصر
اگه منظورتون اینه :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form1());
}
}
}

siavashsay
شنبه 24 فروردین 1392, 12:29 عصر
جناب شهرکی - برنامه Run شد !
توی Msgbox پیغامی که میده اینه :
The system Can not Find the File Specified

siavashsay
شنبه 24 فروردین 1392, 12:31 عصر
و مجدد :
برنامه اجرا شد ! این کد آدرس رو اینطوری گذاشتم و حل شد : D:/flp/flpie.exe
به جای \ از / استفاده کردم !
واقعا عذر میخوام - خیلی اذیت شدید !
خیلی خیلی ممنونم !

MMSHFE
شنبه 24 فروردین 1392, 12:33 عصر
خوب این یعنی اینکه مسیر اشتباهه. شرمنده یادم رفته بود، بجای \ باید \\ بگذارین یا اینکه از / استفاده کنید.

MMSHFE
شنبه 24 فروردین 1392, 12:35 عصر
خواهش میکنم. التبه دکمه تشکر بجای پست دادن کاربرد بهتری داره :چشمک:

siavashsay
شنبه 24 فروردین 1392, 12:39 عصر
عذر میخوام - من همیشه تشکر رو توی تاپیک های که خودم میزنم برای هر کسی که حتی یک پست هم بذار میزنم !
فراموش کردم اما زدم الان !
فقط یک چیزی !
میشه کاری کرد که بعد از اینکه فایل برنامه اجرا شد . توسط خود C# وجود Flash Player چک شه :
1- اگر نبود فایل رو اجرا کنه و بعد Browser رو اجرا کنه !
2- اگر بود یک راست بره و Browser رو اجرا کنه !
اگر سخت هست مهم نیست ! بی خیال میشم !
میشه ؟!

MMSHFE
شنبه 24 فروردین 1392, 12:49 عصر
راه اصلیش چک کردن رجیستری با کلاس Microsoft.Win32.RegistryKey هست ولی یک راه ساده تر هم هست: یک فایل Flash بگذارین و یک دکمه برای نصب و بگین اگه کاربر فایل Flash رو نمیبینه، روی دکمه کلیک کنه تا برنامه نصب بشه.

siavashsay
شنبه 24 فروردین 1392, 12:57 عصر
آهان ! حق با شماس ! این روش رو دیده بودم توی اینترنت که از Flash Player Detection Kit استفاده میکننن !
اما خوی من زیاد وارد نیستم تو C# ! یعنی کلا وارد نیستم و این اولین ( مثلا ) برنامم بود که نوشتم !
میتونم یک کار کنم اونم این که کلا این قضیه Run کردن فایل رو با C# بیخیال شم و توی همون صفحه php خودم که توی C# Browser داره اجرا میشه کاری رو که شما گفتید انجام بدم !
یعنی که فایل فلش بذارم و بگم اگر نمیبینی برو دانلود کن !
اما از اونجایی که میخوام فایل رو همراه Pack Download به کاربر بدم باز نمیشه این کارو کرد !
این برنامه ای که الان به کمک شما نوشتم الان اینطوری شد که :
1- روی فایل EXE من کلیک میشه
2- فایل Flash Player اجرا میشه و از کاربر میخواد که نصبش کنه !
3- اگر کاربر YES بزنه میره و نصب میکنه و باید فایل Browser رو ببنده و دوباره اجرا کنه !
4- اگر کاربر NO بزنه و فایل flash player installer رو اجرا نکنه با یک پلاگین jQuery که پیدا کردم چک میکنه که ببینه Flash Player داره یا نه !
اگر داشت که میره به صفحه game.php و اگر نداشت یه خطا میده و میگه باید Flash Player رو نصب کنید و برای نصب بازی رو ببندید و مجدد راه اندازی کنید ( به بره به مرحله 2 )
------
در هر صورت ممنونم از لطفی که کردید !
ما که نمیتونیم جبران کنیم اما اگر اومدید مشهد و مبل خواستید ما در خدمتیم :))
یا حق

Mahmoud.Afrad
شنبه 24 فروردین 1392, 14:11 عصر
اگر میخواهید به صورت یک پک باشه میتونید یک ستاپ بسازید به صورتی که فایل نصب فلش پلیر قبل از برنامه شما نصب بشه. به آموزش های ساخت ستاپ مراجعه کنید.(با خود VS هم میشه)

siavashsay
شنبه 24 فروردین 1392, 17:02 عصر
اینکار رو میشه با برنامه Install Sheild انجام داد ؟!
اگر میشه یک آموزش رو معرفی کنید !
چون بنده اینکارو کردم اما فقط فایل نصبی رو یعنی FP Installer رو توی یک پوشه میریزه و اجراش نمیکنه !

Mahmoud.Afrad
شنبه 24 فروردین 1392, 17:23 عصر
بله. البته من کار نکردم ولی در حرفه ای بودن Install Sheild شکی نیست
فقط باید فایل نصب فلش رو به عنوان یک prerequisite به ستاپ اضافه کنید. (با Advance installer این کار رو کردم قطعا با هر ستاپ سازی میشه.)
جستجو کنید. به بخش ساخت ستاپ در همین فروم مراجعه کنید. در گوگل سرچ کنید حتی به فارسی سرچ کنید تا آموزش فارسی گیرتون بیاد.

ashkandehnavi
جمعه 03 آبان 1392, 10:52 صبح
http://barnamenevis.org/showthread.php?424968-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D9%81%D8%A7%DB%8C%D9%84-EXE-%D8%AF%D8%B1-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1-%D8%AA%D9%88%D8%B3%D8%B7-%D9%88%D8%A8