איך לבטל את הUAC עבור אפליקציה בודדת.
כשאומרים חלונות ויסטה, הדבר השני שקופץ לראש מיד אחרי הממשק המצועצע זה הUAC (User Account Control). הUAC זו אותה תכונה (כולם יסכימו שמעצבנת, אם כי נחוצה..) שצועקת לנו בכל פעם שאנחנו מפעילים אפליקציה שהמילה Setup מופיעה בה, או בכל פעם שאנחנו מפעילים אפליקציה שמנסה לבצע פעילות שדורשת הרשאות גבוהות מברירת המחדל.
אין ספק שהUAC עוזר למנוע הרצה של קוד זדוני על המחשב - אבל באותו זמן, הוא גם מצליח להוציא משתמשים מנוסים מדעתם - המסך מחשיך ומופיעה תיבת הטקסט.. זה יכול לקרות כשברקע אתה בדיוק מקליד אימייל או צופה בסרט. במקרה הטוב זה קורה מיד, במקרה הפחות טוב - לוקח לתיבת הבחירה זמן להופיע ואנחנו מרעיפים עוד קללה על איזו ענקית תוכנה אלמונית.
איך הUAC עובד?
בגדול (מאוד) - כשמשתמש בעל פריווילגיות מתחבר למערכת, הוא מקבל שני Tokens. הראשון (וזה שמולו הוא עובד), Token עם הרשאות של User. הן מאפשרות לו גישה לכל מה שנמצא תחת c:\Users\HisName וגישה לHKCU בRegistry. הToken השני הוא עם מסיכת ההרשאות המלאה שלו. אם מדובר בAdministrator או בכל סט הרשאות אחר.
ברגע שהמשתמש מבקש לבצע פעולה כלשהי הוא צריך לקבל Token מתקדם יותר. במידה והמערכת מזהה שיש לו כזה, היא מציגה את תיבת הבחירה הידועה לשמצה. אחרת, היא מבקשת שמשתמש בעל הרשאות יתחבר (בדומה לפקודת הsu ביוניקס).
למה לא לבטל את הUAC לגמרי?
אפילו שועל קרבות ותיק כמוני (על מי אני מנסה לעבוד?), שהצליח להעביר 3 שנים עם הXP שלי בלי אנטי וירוס (מצד שני, אני לא משתמש בתוכנות שיתוף.. מה שבהחלט עזר) - מגיע לנקודה בחיים שבה הוא לוחץ Double Click על משהו שהוא לא באמת היה אמור ללחוץ. זה יכול להיות קוד זדוני - וזה יכול להיות סתם קובץ מערכת שבטעות לחצת עליו Shift + Delete. בנוסף, זה גם יכול להיות האח של אותו שועל קרבות ששאל את המחשב הנייד שלו, וגלש לאתרים מפוקפקים של רוכבי אופניים בשביל להוריד שומר מסך.. בכל מקרה - הUAC זו אחת התכונות החשובות בויסטה (אם לא החשובה שבהן), וגם אם היא לפעמים מציקה - חשוב לא לבטל אותה באופן מוחלט לכל המערכת.
אבל.. לא כל הנוצץ זהב
יתרונות רבים לUAC - אך גם חסרונות. לעתים, ישנן אפליקציות שהמפתחים שלהן לא הקפידו מספיק - ובכל ריצה שלהן הן תבקשנה הרשאות Administrator (או לפחות, תפתחנה חלון בן הן ממליצות לך להריץ אותן כAdministrator).
במקרה כזה, יש לנו כמובן האפשרות לתת לאפליקציה הרשאות Administrator כברירת מחדל.. אך אבוי! בכל פעם שנריץ את אותה אפליקציה שהמפתחים שלה הזניחו את הBest Practices של מיקרוסופט הUAC יצעק עלינו שאנחנו מתכוונים להריץ את האפליקציה כAdministrators - ויבקש מאיתנו לאשר שאכן זו כוונתנו.
אז איך אפשר לעצור את הUAC רק עבור אפליקציה בודדת?
ראשית, נייצר פרופיל לאפליקציה. את הפרופיל הזה אח"כ נוכל למחזר בכל מכונה שהיא בארגון!
- ראשית, יש להתקין את הApplication Compatibility Toolkit מאתר מיקרוסופט.
לאחר ההתקנה, יש להריץ את הCompatibility Administrator שהתווסף לתפריט הStart שלכם. כמובן שיש להריץ אותו עם הרשאות Administrator.
- בצד שמאל, תחת Custom Databases אמור להיות פריט ששמו New Database(1) Untitled. יש ללחוץ על הלחצן הימני בתפריט, ולבחור בCreate New ואח"כ Application Fix.
- יש
למלא את הפרטים הרלוונטיים של התוכנית אותה אתם רוצים לתקן. במקרה שלי, ויז'ואל סטודיו 2005.
ואח"כ ללחוץ על Next. מסך הCompatibility Modes הוא מסך מאוד חשוב. באופן תמוה, ברירת המחדל היא ריצה במצב תאימות לחלונות 95. כאן יש לבחור None, אחרת האפליקציה במקרה הטוב תרוץ במצב מותאם ל95, ובמקרה הפחות טוב - פשוט לא תרוץ. אח"כ, לחיצה שוב על Next עד שמגיעים לCompatibility Fixes. ברשימה שתוצג, יש לסמן את RunAsInvoker ואח"כ - ללחוץ Next עד הסוף. כמובן שבתהליך הזה ניתן לייצר פרופיל מותאם אישית שלם לכל אפליקציה, אך בפוסט הזה אני אתמקד אך ורק בנושא ביטול הUAC.
- עכשיו נשאר רק לשמור לקובץ את הפרופיל החדש שיצרנו (לחיצה על Save תבקש ראשית להכניס שם לDB החדש, ורק אח"כ תאפשר לשמור את הקובץ), וזהו סוף השלב הראשון.
השלב השני יהיה להתקין את הפרופיל שיצרנו במכונה:
- נכנס לCommand Prompt (שכמובן נריץ כAdministrator).
- נריץ את הפקודה sdbinst PATH_TO_OUR_FILE ו... זהו :).
מעכשיו, כשתנסו להריץ את הVS2005, הUAC יתעלם ממנו.
חשוב: אם אתם מחליטים לבטל את הפעולה, פשוט חזרו על השלב השני, אך אחרי sdbinst הוסיפו את הפרמטר -u קרי:
קישור למאמר בנושא מהKB.