กระบวนการ. NET เริ่มไดเร็กทอรีเริ่มต้น?


114

ฉันกำลังปิดแอปพลิเคชัน Java จากภายใน C # .NETแอปพลิเคชันคอนโซลใช้งานได้ดีในกรณีที่แอ็พพลิเคชัน Java ไม่สนใจว่าไดเร็กทอรี "default" คืออะไร แต่จะล้มเหลวสำหรับแอ็พพลิเคชัน Java ที่ค้นหาเฉพาะไดเร็กทอรีปัจจุบันสำหรับไฟล์สนับสนุน

มีพารามิเตอร์กระบวนการที่สามารถตั้งค่าเพื่อระบุไดเร็กทอรีเริ่มต้นที่กระบวนการเริ่มต้นได้หรือไม่?

คำตอบ:


183

ใช่ ProcessStartInfo มีคุณสมบัติที่เรียกว่าWorkingDirectoryเพียงใช้:

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

  startInfo.WorkingDirectory = // working directory
  // set additional properties 

Process proc = Process.Start(startInfo);

สามารถWorkingDirectoryเป็นพา ธ สัมพัทธ์ได้หรือไม่และถ้าเป็นเช่นนั้นมันสัมพันธ์กับอะไรไฟล์ปัจจุบันหรือไดเร็กทอรีของไฟล์ปฏิบัติการปัจจุบัน ฉันมีปัญหาในการทำให้โปรแกรมค้นหาไฟล์ปฏิบัติการที่ฉันกำลังพยายามเริ่มต้น ฉันได้ตั้งค่าไดเร็กทอรีการทำงานเป็นไดเร็กทอรีของ exe (สัมพันธ์กับไฟล์ปัจจุบันและ exe ปัจจุบัน) แต่ไม่พบ
pushkin

56

ใช้คุณสมบัติProcessStartInfo.WorkingDirectoryเพื่อตั้งค่าก่อนเริ่มกระบวนการ หากไม่ได้ตั้งค่าคุณสมบัติไดเร็กทอรีการทำงานเริ่มต้นคือ% SYSTEMROOT% \ system32

คุณสามารถกำหนดค่าของ% SYSTEMROOT% ได้โดยใช้:

string _systemRoot = Environment.GetEnvironmentVariable("SYSTEMROOT");  

นี่คือโค้ดตัวอย่างบางส่วนที่เปิด Notepad.exe ด้วยไดเร็กทอรีการทำงานของ% ProgramFiles%:

...
using System.Diagnostics;
...

ProcessStartInfo _processStartInfo = new ProcessStartInfo();
  _processStartInfo.WorkingDirectory = @"%ProgramFiles%";
  _processStartInfo.FileName         = @"Notepad.exe";
  _processStartInfo.Arguments        = "test.txt";
  _processStartInfo.CreateNoWindow   = true;
Process myProcess = Process.Start(_processStartInfo);

นอกจากนี้ยังมีตัวแปร Environment ที่ควบคุมไดเร็กทอรีการทำงานปัจจุบันสำหรับกระบวนการของคุณซึ่งคุณสามารถเข้าถึงได้โดยตรงผ่านคุณสมบัติEnvironment.CurrentDirectory


ดีฉันไม่ทราบว่าคุณสามารถใช้ตัวแปรสภาพแวดล้อมในคุณสมบัติ. WorkingDirectory
Brain2000

1
Bingo คือคำตอบ - ไดเรกทอรีเริ่มต้นคือ SYSTEMROOT +1
ashes999

17

เพียงแค่ทราบหลังจากที่หัวของฉันพยายามที่จะใช้สิ่งนี้ การตั้งค่า WorkingDirectory จะไม่ทำงานหากคุณมี "UseShellExecute" ตั้งค่าเป็นเท็จ


1
สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม หากต้องการวิจารณ์หรือขอคำชี้แจงจากผู้เขียนให้แสดงความคิดเห็นไว้ด้านล่างโพสต์ของพวกเขาคุณสามารถแสดงความคิดเห็นในโพสต์ของคุณเองได้ตลอดเวลาและเมื่อคุณมีชื่อเสียงเพียงพอแล้วคุณจะสามารถทำได้แสดงความคิดเห็นในโพสต์ใด
Cyclonecode

1
แม้ 6 ปีต่อมาความคิดเห็นเกี่ยวกับ UseShellExecute ก็มีประโยชน์ แก้ไขปัญหา
AlanC


6

เมธอด Process.Start มีโอเวอร์โหลดที่ใช้อินสแตนซ์ของ ProcessStartInfo คลาสนี้มีคุณสมบัติที่เรียกว่า "WorkingDirectory"

ตั้งค่าคุณสมบัตินั้นเป็นโฟลเดอร์ที่คุณต้องการใช้และควรเริ่มต้นในโฟลเดอร์ที่ถูกต้อง


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