في انتظار Shellexecuteex (وضع حقوق الوصول على عملية Windows)
-
16-09-2019 - |
سؤال
أنا أستخدم ShellExecuteEx
وظيفة في برنامج C ++ لإطلاق ملف Uninstall.lnk. في برنامجي، أود الانتهاء من إلغاء التثبيت. كانت محاولتي الأولى هي ضبط SEE_MASK_NOCLOSEPROCESS
العلم في SHELLEXECUTEINFO
هيكل ثم اتصل WaitForSingleObject
على ال hProcess
التعامل مع المتاحة في SHELLEXECUTEINFO
هيكل مرت إلى ShellExecuteEx
, ، لكن ذلك لا يزال يبدو أن العودة في وقت مبكر جدا.
شكوكي الحالية هي أن هذه العملية التي أطلقتها SHELLEXECUTEEX (هل تقوم بإطلاق قذيفة جديدة؟) إنشاء عمليات تابعة جديدة، ولكن لا تنتظرها. لذلك أحاول إنشاء "انتظر لعملية طفلي وجميع الأطفال يقومون بإطلاق" وظيفة ". للقيام بذلك، أحاول استخدام كائنات الوظيفة.
لقد أنشأت كائن وظيفة باستخدام CreateJobObject
, ، تعيين مقبض العملية الذي تم إرجاعه بواسطة ShellExecuteEx
إلى الوظيفة ثم حاول انتظار كائن المهمة. لسوء الحظ، في تعيين عملية الوظيفة، وأعتقد أن هذا بسبب عدم كفاية حقوق الوصول.
هل يعرف أي شخص كيفية تعيين حقوق الوصول Process_Set_Quota وحقوق الوصول Process_terminate (التي هي مطلوبة ل AssignProcessToJobObject
لتحقيق النجاح، وفقا ل MSDN) على مقبض العملية، أو طريقة أخرى لانتظار العملية التي تم إطلاقها بواسطة shelllexecuteex لإنهاءها؟
تحديث: يجب أن أشير إلى أنني سأطلق أيضا تطبيقات أخرى، وليس فقط Uninstall.lnk
. وبعد واحد منهم مثل ClickOnce. التطبيق، الذي هو بفعالية ملف XML بسيط مع ملحق الملف .application
.
المحلول
يستخدم Vista كائنات مهمة لإطلاق الروابط. لذلك قد يتم بالفعل تعيين العملية التي تحاول تعيينها إلى كائن وظيفة آخر.
يرى: هذا السؤال
نصائح أخرى
لماذا لا تنفذ الملف المستهدف بدلا من الفتح Uninstall.lnk
ب يمكنك استخدام IShellLink
للحصول على هدف الاختصار. ثم ستتمكن من تنفيذ ملف الهدف عبر SHELLEXECUTEEX باستخدام SEE_MASK_NOCLOSEPROCESS
علم.