في انتظار Shellexecuteex (وضع حقوق الوصول على عملية Windows)

StackOverflow https://stackoverflow.com/questions/1142253

سؤال

أنا أستخدم 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 علم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top