मैं एनएसआईएस के साथ काफी नया हूं। मैं इंस्टॉलर को चलाने के लिए व्यवस्थापक अनुमतियों का अनुरोध करने का प्रयास कर रहा हूं, क्योंकि यह रजिस्ट्री के साथ थोड़ा सा गड़बड़ करता है। "RequestExecutionLevel" और "MULTIUSER_EXECUTIONLEVEL" के साथ मेरी समस्या यह है कि वे संदर्भ मेनू में "व्यवस्थापक के रूप में चलाएं" चुनते समय भी इंस्टॉलर खोलने से किसी भी गैर-व्यवस्थापक उपयोगकर्ता को बिल्कुल अवरुद्ध करते हैं। मैंने रनएएस डीएलएल का उपयोग करने का प्रयास किया है, लेकिन मुझे "रनएएसडब्लू" फ़ंक्शन में पास किए गए $ कमांड वैरिएबल में क्या रखना है, इसके बारे में एक धागा नहीं मिला है।आप NSIS का उपयोग कर व्यवस्थापक अनुमतियों का अनुरोध कैसे करते हैं?
यहाँ मेरी (सुंदर काट दिया-अप) कोड है:
StrCpy $0 0
StrCpy $1 ""
System::Call 'RunAs::GetAdministrators(w r1, *i .r0) i .r2 ? u'
System::Alloc 64
Pop $4
StrCpy $4 $2
StrCpy $5 ""
loop:
IntCmp $0 0 endloop
System::Call '*$4(w .r3)'
StrCpy $5 "$5|$3"
endloop:
System::Free $4 ; we free the memory used by the array
StrCpy $5 "$5" "" 1
!insertmacro MUI_INSTALLOPTIONS_WRITE "Settings.ini" "Field 1" "ListItems" $5
!insertmacro MUI_INSTALLOPTIONS_DISPLAY "Settings.ini"
!insertmacro MUI_INSTALLOPTIONS_READ $1 "UserPass" "Field 1" "State"
!insertmacro MUI_INSTALLOPTIONS_READ $2 "Settings.ini" "Field 2" "State"
StrCpy $3 "%%LOGONSERVER%%"
StrCpy $3 0
StrCpy $4 0
System::Call 'RunAs::RunAsW(w r1, w r2, w r3, *w .r4) i .r0 ? u'
MessageBox MB_OK $0
IntCmp $0 1 success
Quit
success:
!insertmacro MUI_LANGDLL_DISPLAY
यह का एक बहुत है बस काम और परीक्षण और त्रुटि लगता है। (बीटीडब्ल्यू - मैंने सभी प्रशासकों को प्राप्त करने के लिए एक लूप के माध्यम से भी चलाने की कोशिश की, लेकिन ऐसा लगता है कि डीएलएल केवल 32-बिट मशीनों के लिए था, इसलिए ...)।
वैसे भी, मेरे सवाल यह है:
किसी को भी ("RunAs" का उपयोग या अन्यथा), एक संवाद उपयोगकर्ता नाम और पासवर्ड का अनुरोध खोलने साख की जाँच करें और स्थापना के साथ जारी रखने के लिए केवल अगर वे बाहर की जाँच के लिए एक रास्ता पता है ?
इसके अलावा, मुझे पता है कि एक इंस्टॉलर स्थापित करने का एक तरीका है ताकि यह उस अच्छे ढाल आइकन के साथ आता है जो उपयोगकर्ताओं को यह बताता है कि व्यवस्थापक अनुमति का अनुरोध किया जाएगा। क्या कोई जानता है कि ऐसा कैसे करें?
किसी भी मदद की बहुत सराहना की जाएगी, क्योंकि यह एकमात्र चीज है जो वर्तमान में मेरे ऐप की तैनाती को रोकती है।
"सिस्टम :: ऑलोक 64 " का बिंदु क्या है जब आप पॉप के बाद पॉइंटर को फेंक देते हैं और स्मृति को रिसाव करते हैं। एनएसआईएस हमेशा 32-बिट है, इसलिए लूप के बारे में आपकी टिप्पणी कम समझ में आता है ... – Anders
"वे दोनों कॉन्फ़िगरेशन खोलने से किसी भी गैर-व्यवस्थापक उपयोगकर्ता को पूरी तरह अवरुद्ध करते हैं, भले ही संदर्भ मेनू में" व्यवस्थापक के रूप में चलाएं "का चयन करते समय" यह नहीं है ठीक है! आपका विंडोज संस्करण और यूएसी सेटिंग्स क्या है? – Anders
$ कमांड वेरिएबल वह चीज है जिसे आप निष्पादित करना चाहते हैं, "calc.exe" आदि – Anders