كيفية منع نظام التشغيل Vista من طلب الارتفاع على patch.exe؟

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

  •  22-08-2019
  •  | 
  •  

سؤال

[أنا آسف لأن هذا ليس سؤال برمجة بشكل مباشر.لكنني قمت مؤخرًا بالتبديل إلى جهاز يعمل بنظام Vista جديد حيث أبقي UAC ممكّنًا (من فضلك لا تطلب مني تعطيله، فهذا ليس خيارًا).]

في كل مرة أقوم فيها بتشغيل patch.exe الخاص بـ gnu، أحصل على مربع حوار الارتفاع من نظام التشغيل Vista.إذا قمت بإعادة تسمية patch.exe إلى foo.exe فإنه لا يفعل ذلك، لذلك أفترض أن هذا هو أحد "الاستدلالات" الخاصة بنظام التشغيل Vista.

هل يعرف أحد كيفية تعطيل هذا؟إنه يقودني إلى الجنون ولا يساعدني Google.

أم يجب أن أضيف بيانًا فقط لـ patch.exe لإخبار النظام بعدم محاولة رفع مستوى هذا؟هل سينجح ذلك، وإذا كان الأمر كذلك فكيف يمكنك تقديم مثل هذا البيان؟

شكرًا جزيلاً، لقد كنت أضرب رأسي بالحائط لمدة ساعة على هذا حتى الآن.

هل كانت مفيدة؟

المحلول

ومن:
HTTP: // الاجتماعية .msdn.microsoft.com / منتديات / EN-US / windowsgeneraldevelopmentissues / موضوع /-bf4f7dfa 5553-41d3-9c8e-311ee4a88599 /

<اقتباس فقرة>   

إذا يمكنك إضافة اضح ل   تنفيذ المتضررة إعلان   requestedExecutionLevel من "asInvoker"   يجب التوقف عن المطالبة.

ودليل على المرتبطة العمارة UAC وتحويل التطبيقات الموجودة بحيث أنها تعمل بشكل صحيح (بالقرب من المركز الخامس السفلي من الصفحة):

http://technet.microsoft.com/en-us/library /cc709628.aspx

وأخيرا، وكيفية كتابة مثل هذا البيان:

http://www.google.com/search؟q = الكتابة + على + UAC + واضح

و-Adam

نصائح أخرى

المشكلة هي أن التطبيق الخاص بك لا يحتوي على بيان التجميع مع ملف مستوى التنفيذ المطلوب.

خلفية

مطلوب من كافة تطبيقات Windows المكتوبة بشكل صحيح أن يكون لها بيان التجميع.وبدءًا من عام 2006، أحد العناصر المطلوبة منك هو requestExecutionLevel الذي يحدد ما إذا كان التطبيق الخاص بك يمكنه العمل فقط إذا كان المستخدم مسؤولاً.

إذا لم يكن التطبيق الخاص بك يحتوي على بيان التجميع، أو إذا لم يكن لديه ملف requestExecutionLevel سوف يفترض Windows أنه ملف إرث التطبيق، والقيام بالأشياء التي نأمل أن تبقيه قيد التشغيل.

أحد الأمور المتعلقة بالتوافق بالنسبة للتطبيقات القديمة هو أن بعضها قد يكون أداة تثبيت أو أداة تحديث، ويمكن أن يعمل فقط عند تشغيله كمسؤول.يحاول Windows تخمين هذه التطبيقات من خلال أسماء الملفات الخاصة بها:

  • يثبت
  • تحديث
  • رقعة

كلها أمثلة على أسماء الملفات التي تم اكتشافها بواسطة استدلالات التوافق التي تحاول الارتقاء تلقائيًا ل المستخدم.

إذا لم يكن لدى التطبيق بيان تجميع، فهذا يعني أنه ليس تطبيق Windows مكتوبًا بشكل صحيح.

الحل الصحيح

الحل الصحيح هو إضافة بيان التجميع الذي ستحتوي عليه كافة التطبيقات الصحيحة.هذا تعطيل الاستدلال.

نموذج بيان UAC "asInvocer":

<?xml version="1.0" encoding="utf-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
      <security>
         <requestedPrivileges>
            <requestedExecutionLevel level="asInvoker" />
         </requestedPrivileges>
      </security>
   </trustInfo>
</assembly> 

في حالتي كان لي لكتابة برنامج المجمع الذي يجعل ما يلي:

و"patch.exe" ملف 1-نسخ إلى مجلد النظام المؤقت (٪ TMP٪) مع اسم آخر: "apply.exe"

2-تنفيذ "٪ TMP٪ \ apply.exe" باستخدام الوسائط المطلوبة.

3-حذف "٪ TMP٪ \ apply.exe" ملف

ولن تحتاج لكتابة البيان.

إذا كنت بحاجة إلى حساب "patch.exe" المسار الكامل، على افتراض إكس على متغير البيئة٪٪ PATH، يمكنك استخدام التعليمات البرمجية التالية في C #:

public string GetPatchInstallPath()
{
    StringDictionary env = 
    System.Diagnostics.Process.GetCurrentProcess().StartInfo.EnvironmentVariables;
    string pathEnvVble = env["PATH"];
    string[] paths = new string[]{};
    paths = pathEnvVble.Split(new char[] { ';' });

    foreach (string p in paths)
    {
       string fullPath = Path.Combine(p, "patch.exe");
       if (File.Exists(fullPath))
           return fullPath;
    }
    return string.Empty;
}

وعلى خلاف ذلك، يمكنك تمرير المسار الكامل patch.exe لبرنامج المجمع الخاص بك إذا كنت لا ترغب في إضافة إدخال جديد إلى٪ المتغير٪ PATH للموقع patch.exe الخاص بك.

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