Score:0

PowerShell บน Windows: กระบวนการเริ่มต้นล้มเหลวหากใช้อาร์กิวเมนต์การเปลี่ยนทิศทางเอาต์พุต

ธง rs

ทำไม เริ่มต้นกระบวนการ ไม่พบไฟล์เรียกทำงาน (ไม่ได้อยู่ในเส้นทาง) ถ้า -RedirectStandardOutput หรือ -RedirectStandardError ระบุ?

เช่น.

[X:\] เริ่มกระบวนการ -FilePath "prog.exe" -WorkingDirectory (รับตำแหน่ง) เส้นทาง

โปรแกรมเริ่มต้นและดำเนินการตามที่ควร แต่เมื่อฉันเพิ่มการเปลี่ยนเส้นทางเอาต์พุต ทุกอย่างจะแตกสลาย:

[X:\] เริ่มกระบวนการ -FilePath "prog.exe" -WorkingDirectory (รับตำแหน่ง) เส้นทาง -RedirectStandardOutput stdout.txt
เริ่มกระบวนการ: ไม่สามารถเรียกใช้คำสั่งนี้ได้เนื่องจากข้อผิดพลาด: ระบบไม่พบไฟล์ที่ระบุ

เปลี่ยนเส้นทางด้วย 1>stdout.txt ตัวดำเนินการทำงานตามที่คาดไว้

ดูเหมือนว่าจะไม่ส่งผลกระทบต่อโปรแกรมที่อยู่ในไดเร็กทอรีที่อยู่ในรายการ เส้นทาง. ฉันคิดไม่ออกจริงๆ ว่าตรรกะตรงนี้คืออะไร การเปลี่ยนเส้นทางไม่ควรเกี่ยวข้องกับการแก้ไขเส้นทางไบนารีตั้งแต่แรก

ทำงานบน Windows 10 Professional

อัปเดต: การติดตามแบบเต็มและตัวสร้างซ้ำอย่างง่าย

PS> แมว .\hello.c
#รวม <stdio.h>

int main (int argc, ถ่าน** argv)
{
        printf("เมห์\n");
        getchar();
        กลับ 0;
}

PS> cl สวัสดีค
Microsoft (R) C/C++ การเพิ่มประสิทธิภาพคอมไพเลอร์เวอร์ชัน 19.29.30138 สำหรับ x86
ลิขสิทธิ์ (C) Microsoft Corporation. สงวนลิขสิทธิ์.

สวัสดีซี
Microsoft (R) Incremental Linker เวอร์ชัน 14.29.30138.0
ลิขสิทธิ์ (C) Microsoft Corporation. สงวนลิขสิทธิ์.

/ออก:hello.exe
สวัสดี obj

PS> เริ่มกระบวนการ -FilePath hello.exe -WorkingDirectory (รับตำแหน่ง) เส้นทาง

PS> เริ่มกระบวนการ -FilePath hello.exe -WorkingDirectory (รับตำแหน่ง) เส้นทาง -RedirectStandardOutput stdout.txt
เริ่มกระบวนการ: ไม่สามารถเรียกใช้คำสั่งนี้ได้เนื่องจากข้อผิดพลาด: ระบบไม่พบไฟล์ที่ระบุ
ที่บรรทัด:1 ตัวอักษร:1
+ Start-Process -FilePath hello.exe -WorkingDirectory (Get-Location).Pa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [เริ่มกระบวนการ], InvalidOperationException
    + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand

อัปเดต 2:

ดูเหมือนว่าการใช้เส้นทางสัมบูรณ์สำหรับไฟล์ปฏิบัติการเป็นวิธีแก้ปัญหา (แม้ว่าจะไม่ได้อธิบายว่าเหตุใดทิศทางเอาต์พุตจึงแบ่งการแก้ไขชื่อ/เส้นทางที่เรียกใช้งานได้ในตอนแรก)

JosefZ avatar
th flag
แปลก⦠ผลลัพธ์จาก `where.exe "prog.exe" เป็นอย่างไร ก่อนและหลังตัวอย่าง _running_ (เช่น ไม่มีพารามิเตอร์ `-RedirectStandard`) บางที `prog.exe` อาจเปลี่ยนแปลง `$env:PATH` หรือการแมปไดรฟ์
rs flag
ผลลัพธ์ของโปรแกรมไม่สำคัญ/ไม่มีผลกระทบใดๆ เนื่องจากความแตกแยกเกิดขึ้นใน PowerShell ก่อนที่โปรแกรมจะถูกดำเนินการเสียด้วยซ้ำ โปรแกรมที่ฉันพยายามดำเนินการโดยใช้โครงร่างนี้เป็นแอปคอนโซล Windows ทั้งหมดที่ไม่มี GUI อัปเดตคำถามด้วยตัวทำซ้ำขั้นต่ำ
rs flag
ลืมบอกไปว่าโปรแกรมที่จะรันเป็นแอปพลิเคชันภายในของเรา ดังนั้นฉันจึงรู้ว่ามันไม่ได้มีการซ่อม 'PATH' -- เว้นแต่ว่าการติดตั้ง MSVC CRT จะทำบางสิ่งที่ไม่ชัดเจนเมื่อมีการไพพ์เอาต์พุต :)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา