เรียกใช้แอปพลิเคชัน (.EXE) จาก C # หรือไม่


164

ฉันจะเปิดแอปพลิเคชันโดยใช้ C # ได้อย่างไร

ข้อกำหนด: ต้องทำงานบนWindows XPและWindows VistaVista

ฉันได้เห็นตัวอย่างจากตัวอย่างของ DinnerNow.net ที่ใช้งานได้ใน Windows Vista เท่านั้น

คำตอบ:


168

ใช้System.Diagnostics.Process.Start()วิธีการ

ลองอ่านบทความนี้เกี่ยวกับวิธีใช้งาน

Process.Start("notepad", "readme.txt");

string winpath = Environment.GetEnvironmentVariable("windir");
string path = System.IO.Path.GetDirectoryName(
              System.Windows.Forms.Application.ExecutablePath);

Process.Start(winpath + @"\Microsoft.NET\Framework\v1.0.3705\Installutil.exe",
path + "\\MyService.exe");

230

นี่คือตัวอย่างของรหัสที่เป็นประโยชน์:

using System.Diagnostics;

// Prepare the process to run
ProcessStartInfo start = new ProcessStartInfo();
// Enter in the command line arguments, everything you would enter after the executable name itself
start.Arguments = arguments; 
// Enter the executable to run, including the complete path
start.FileName = ExeName;
// Do you want to show a console window?
start.WindowStyle = ProcessWindowStyle.Hidden;
start.CreateNoWindow = true;
int exitCode;


// Run the external process & wait for it to finish
using (Process proc = Process.Start(start))
{
     proc.WaitForExit();

     // Retrieve the app's exit code
     exitCode = proc.ExitCode;
}

มีมากที่คุณสามารถทำกับวัตถุเหล่านี้คุณควรอ่านเอกสาร: ProcessStartInfo , กระบวนการ


7
แค่อยากจะชี้ให้เห็นว่าสิ่งนี้ดูเหมือนว่าจะทำงานกับไฟล์ประเภทอื่นที่ไม่ใช่. exes เพียงชี้ไปที่ไฟล์ที่คุณต้องการเปิดและ Windows จะพยายามอย่างดีที่สุดที่จะเปิด: System.Diagnostics.Process.Start (@ "C: \ Users \ Blank \ Desktop \ PdfFile.pdf");
DLeh

WindowStyle = ProcessWindowStyle.Hidden สำหรับไม่ใช่ GUI ครั้งแรกที่ฉันเรียกใช้มันล้มเหลวโดยไม่มี UseShellExecute = false แต่ตอนนี้ใช้ได้ ไม่แน่ใจว่าเกิดอะไรขึ้นที่นั่น ...
บาร์ตัน

ถ้าฉันไม่รู้ชื่อเต็มของ exe ฉันต้องการเรียก "PathTo * .exe" เป็นไปได้ไหม ฉันสามารถใช้ "*" สำหรับชื่อที่เหลือได้หรือไม่?
วิษณุ

@vishal กระบวนการนี้มีไว้สำหรับการเรียกใช้ไฟล์เรียกทำงานเฉพาะ แน่นอนคุณสามารถลองใช้PathTo*.exeแต่ฉันไม่คาดหวังว่ามันจะทำงาน (a) เกิดอะไรขึ้นถ้ามีการแข่งขันหลายรายการ? (b) ฉันหวังว่ารหัสของ Microsoft จะไม่อนุญาตให้ทำเช่นนี้เพราะความปลอดภัยจะลดลง
sfuqua

58
System.Diagnostics.Process.Start("PathToExe.exe");

ถ้าฉันไม่รู้ชื่อเต็มของ exe ฉันต้องการเรียก "PathTo * .exe" เป็นไปได้ไหม
vishal

@vishal คุณต้องเขียนโค้ดโพรซีเดอร์ของการค้นหาเพื่อค้นหาไฟล์ที่ปฏิบัติการได้
KADEM Mohammed


14

หากคุณมีปัญหาในการใช้ System.Diagnostics เหมือนฉันใช้รหัสง่าย ๆ ต่อไปนี้ที่จะทำงานได้โดยไม่ต้องใช้:

Process notePad = new Process();
notePad.StartInfo.FileName   = "notepad.exe";
notePad.StartInfo.Arguments = "mytextfile.txt";
notePad.Start();

10
สิ่งนี้เป็น "ไม่มี System.Diagonostics" อย่างไร Processอยู่ใน System.Diagnostics
พอลซินแคลร์

8

นอกจากนี้คุณจะต้องใช้ตัวแปรสภาพแวดล้อมสำหรับเส้นทางของคุณหากเป็นไปได้: http://en.wikipedia.org/wiki/Environment_variable#Default_Values_on_Microsoft_Windows

เช่น

  • % WINDIR% = ไดเรกทอรี Windows
  • % APPDATA% = ข้อมูลแอปพลิเคชัน - แตกต่างกันมากระหว่าง Vista และ XP

มีอีกมากมายลองดูลิงค์สำหรับรายการที่ยาวขึ้น


2

เพียงแค่ใส่ file.exe ของคุณในโฟลเดอร์ \ bin \ Debug และใช้:

Process.Start("File.exe");

3
คำตอบของคุณดีขึ้นอย่างไรกับคำตอบก่อนหน้าทั้งหมด?
mustaccio

คนส่วนใหญ่ที่มาดูโพสต์นี้สับสนเกี่ยวกับเส้นทางของไฟล์ที่พวกเขามักจะใส่ในโฟลเดอร์ debug ดังนั้นเมื่อพวกเขาใช้คำแนะนำ "File.exe" ของฉันเข้าใจโดยตรงไม่จำเป็นต้องมีพา ธ ในกรณีนี้
อามินโมฮาเหม็ด


0

ลองสิ่งนี้:

Process.Start("Location Of File.exe");

(ตรวจสอบให้แน่ใจว่าคุณใช้ไลบรารี System.Diagnostics)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.