ฉันจะหาเส้นทางไปยังบริการปฏิบัติการ Windows โดยไม่ต้องใช้ sc qc ได้อย่างไร


15

ฉันต้องการสอบถามบริการ windows เพื่อหาพา ธ ที่สามารถใช้งานได้ผ่านทางพรอมต์คำสั่ง ฉันคิดว่าวิธีที่ฉันจะทำคือ: sc qc myServiceNameแต่เมื่อฉันทำอย่างนั้นฉันได้รับข้อผิดพลาดต่อไปนี้:

[SC] QueryServiceConfig ล้มเหลว 122:

พื้นที่ข้อมูลที่ส่งไปยังการเรียกของระบบมีขนาดเล็กเกินไป

[SC] GetServiceConfig ต้องการ 1,094 ไบต์

ฉันคิดว่านี่หมายความว่าคำสั่ง sc กำลังส่งโครงสร้างข้อมูลไปยังไลบรารีอื่นที่เล็กเกินไปสำหรับข้อมูลที่ต้องส่งคืน แทนที่จะ SC กำลังลองใหม่กับโครงสร้างข้อมูลที่มีขนาดใหญ่กว่า (1,094 ไบต์) มันจะระเบิดและให้ข้อความผิดพลาดที่น่าเกลียดนี้แก่ฉัน ขอบคุณ Micro $ oft

ดังนั้นมีวิธีแก้ไขข้อผิดพลาดนี้หรือไม่ ฉันต้องการเส้นทางไปยังไฟล์ที่เรียกทำงานได้ แต่จะแยกมันออกจากข้อความอื่น ๆ หากจำเป็น

คำตอบ:


20

ฉันพบปัญหานี้เช่นกันเมื่อพยายามรับรายละเอียดของบริการที่เส้นทางไปยังปฏิบัติการได้ยาวมาก การสนทนานี้มีวิธีแก้ปัญหา คุณสามารถส่งผ่านขนาดบัฟเฟอร์เป็นอาร์กิวเมนต์sc qcได้ นั่นคือถ้าคุณทำ:

sc qc <service name> 5000

ข้อผิดพลาด "data data ที่ส่งไปยังการเรียกของระบบน้อยเกินไป" หายไป


ดูที่หน้าSC QC MSDN:

sc [<ServerName>] qc [<ServiceName>] [<BufferSize>]

ที่อยู่:

<BufferSize> ระบุขนาด (เป็นไบต์) ของบัฟเฟอร์ ขนาดบัฟเฟอร์เริ่มต้นคือ 1,024 ไบต์


2
FYI 2^13 = 8192เป็นค่าสูงสุดสำหรับขนาดบัฟเฟอร์
nebffa

sc queryex type= service state= all | find /i "myServiceNameแสดงรายการบริการทั้งหมด แต่น่าเสียดายที่ไม่มีเส้นทาง
Shayan

13

ฉันพบวิธีแก้ปัญหาที่ใช้การได้:

reg query "HKLM\System\CurrentControlSet\Services\<serviceName>" /v "ImagePath"

แน่นอนว่าต้องมีการวิเคราะห์คำ แต่ให้เส้นทางแบบเต็มกับกล่องโต้ตอบ services.msc


10

คุณสามารถทำได้ใน PowerShell ด้วยแบบสอบถาม WMI เช่นนี้

$service = get-wmiobject -query 'select * from win32_service where name="winrm"'; echo $service.pathname

ซึ่งจะให้เส้นทางแบบเต็มรวมถึงตัวเลือกตามที่ปรากฏใน services.msc เพียงแทนที่winrmตัวอย่างของฉันด้วยบริการใด ๆ ที่คุณต้องการค้นหา

แบบสอบถามข้างต้นสำหรับwinrmควรส่งออกC:\Windows\System32\svchost.exe -k NetworkService


น่าเสียดายที่ฉันไม่สามารถพึ่งพา PowerShell ได้เนื่องจาก XP ไม่มีค่าเริ่มต้น ฉันต้องการการสนับสนุน XP, Server 2008 และ 7 ทั้งหมดโดยไม่ต้องติดตั้งซอฟต์แวร์เพิ่มเติม
Jared

@ จาเร็ดที่แย่เกินไป คุณไม่สามารถเรียกใช้จากเครื่องเดียวกับเครื่องระยะไกลได้หรือไม่
MDMarra

ไม่มีสิ่งนี้เป็นสคริปต์เล็กน้อยที่จะไปในโปรแกรมถอนการติดตั้งสำหรับแอปพลิเคชัน ฉันหาวิธีแก้ปัญหาที่ใช้งานได้และเพิ่มคำตอบสำหรับมัน
Jared

4

ลองใช้wmicยูทิลิตีบรรทัดคำสั่ง CrashPlanServiceนี่คือตัวอย่างของการบริการบนเครื่องของฉันที่เรียกว่า

C:\Users\Ben>wmic service CrashPlanService get PathName

PathName
"C:\Program Files\CrashPlan\CrashPlanService.exe"

โดยพื้นฐานแล้ว, wmic service <<YourService>> get PathName.


1
ใช้งานไม่ค่อยได้ แต่ในทางกลับกันงานนี้: "บริการ wmic | ค้นหา" <servicename> "
djangofan

@dangangfan คุณได้รับผลอะไรและบริการใดบ้าง บางทีคุณอาจมีรุ่นอื่นwmic(ฉันใช้ Windows 7 SP1)
Ben Pilbrow

@Ben Pilbrow นั่นไม่ได้ผลสำหรับฉันเช่นกัน wmic ไม่ได้รับชื่อเส้นทาง (เพิ่งส่งกลับ "PathName" โดยไม่มีอะไรในบรรทัดต่อไปนี้) ไม่แน่ใจว่าเป็นเพราะมีพารามิเตอร์จำนวนมากฝังอยู่ในพา ธ ทำให้มันยาวมาก
Jared

ทำงานให้ฉัน แต่ฉันต้องดำเนินการผลเล็กน้อย: ((บริการ wmic SQLBrowser รับ PathName) - จับคู่ " "")[0].replace("" "," ")
katbyte

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