मेरे पास एक घटक है जिसके लिए .NET 4.0 चलाने की आवश्यकता है, मेरा Inno सेटअप इंस्टॉलर यह कैसे सत्यापित कर सकता है कि यह स्थापित है, और यदि नहीं, तो उपयोगकर्ता को इसे इंस्टॉल करने के लिए संकेत दें?इनो सेटअप: सत्यापित करें कि .NET 4.0 स्थापित है
उत्तर
InitializeSetup
फ़ंक्शन को कॉल किया जाता है जब इनो सेटअप निष्पादन योग्य चलाया जाता है।
सबसे पहले, यह एक रजिस्ट्री प्रविष्टि के संस्करण को इंगित करता है की उपस्थिति के लिए जाँच करता है एक कस्टम स्क्रिप्ट के लिए इस कोड को सम्मिलित करना आप क्या चाहते हैं क्या करना चाहिए:
function IsDotNetDetected(version: string; service: cardinal): boolean;
// Indicates whether the specified version and service pack of the .NET Framework is installed.
//
// version -- Specify one of these strings for the required .NET Framework version:
// 'v1.1' .NET Framework 1.1
// 'v2.0' .NET Framework 2.0
// 'v3.0' .NET Framework 3.0
// 'v3.5' .NET Framework 3.5
// 'v4\Client' .NET Framework 4.0 Client Profile
// 'v4\Full' .NET Framework 4.0 Full Installation
// 'v4.5' .NET Framework 4.5
// 'v4.5.1' .NET Framework 4.5.1
// 'v4.5.2' .NET Framework 4.5.2
// 'v4.6' .NET Framework 4.6
// 'v4.6.1' .NET Framework 4.6.1
// 'v4.6.2' .NET Framework 4.6.2
// 'v4.7' .NET Framework 4.7
//
// service -- Specify any non-negative integer for the required service pack level:
// 0 No service packs required
// 1, 2, etc. Service pack 1, 2, etc. required
var
key, versionKey: string;
install, release, serviceCount, versionRelease: cardinal;
success: boolean;
begin
versionKey := version;
versionRelease := 0;
// .NET 1.1 and 2.0 embed release number in version key
if version = 'v1.1' then begin
versionKey := 'v1.1.4322';
end else if version = 'v2.0' then begin
versionKey := 'v2.0.50727';
end
// .NET 4.5 and newer install as update to .NET 4.0 Full
else if Pos('v4.', version) = 1 then begin
versionKey := 'v4\Full';
case version of
'v4.5': versionRelease := 378389;
'v4.5.1': versionRelease := 378675; // 378758 on Windows 8 and older
'v4.5.2': versionRelease := 379893;
'v4.6': versionRelease := 393295; // 393297 on Windows 8.1 and older
'v4.6.1': versionRelease := 394254; // 394271 before Win10 November Update
'v4.6.2': versionRelease := 394802; // 394806 before Win10 Anniversary Update
'v4.7': versionRelease := 460798; // 460805 before Win10 Creators Update
end;
end;
// installation key group for all .NET versions
key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\' + versionKey;
// .NET 3.0 uses value InstallSuccess in subkey Setup
if Pos('v3.0', version) = 1 then begin
success := RegQueryDWordValue(HKLM, key + '\Setup', 'InstallSuccess', install);
end else begin
success := RegQueryDWordValue(HKLM, key, 'Install', install);
end;
// .NET 4.0 and newer use value Servicing instead of SP
if Pos('v4', version) = 1 then begin
success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount);
end else begin
success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount);
end;
// .NET 4.5 and newer use additional value Release
if versionRelease > 0 then begin
success := success and RegQueryDWordValue(HKLM, key, 'Release', release);
success := success and (release >= versionRelease);
end;
result := success and (install = 1) and (serviceCount >= service);
end;
function InitializeSetup(): Boolean;
begin
if not IsDotNetDetected('v4.6', 0) then begin
MsgBox('MyApp requires Microsoft .NET Framework 4.6.'#13#13
'Please use Windows Update to install this version,'#13
'and then re-run the MyApp setup program.', mbInformation, MB_OK);
result := false;
end else
result := true;
end;
(http://www.kynosarges.de/DotNetVersion.html कोड यहाँ से लिया गया)। नेट फ्रेमवर्क जो स्थापित है। यदि रजिस्ट्री प्रविष्टि मौजूद नहीं है, तो यह उपयोगकर्ता को .NET ढांचे को डाउनलोड करने के लिए संकेत देता है। यदि उपयोगकर्ता हां कहता है, तो यह डाउनलोड यूआरएल खोलता है। , (आप संस्करण 4.0 के लिए संस्करण यह लिपि में निर्दिष्ट करता है बदलने के लिए हो सकता है।)
मैं भी this article on CodeProject, जो आप जो खोज रहे हैं ऐसा करने का एक अधिक व्यापक और अनुकूलन तरीका हो सकता है भर में आया था, हालांकि यह समझने के लिए और अधिक काम ले सकते हैं और संस्करण 4.0 के साथ काम करने के लिए संशोधित किया जाना होगा।
@ कोडी ग्रे - आपके समाधान के लिए धन्यवाद। बहुत उपयोगी!
यदि कोई दिलचस्पी लेता है, तो यहां स्ट्रिंग के बजाए गणना मूल्यों का उपयोग करके उनके कार्य पर मेरा कार्य है। यह परिवर्तन पूरी तरह से व्यक्तिगत वरीयता का मामला है। कोड में v4.5 के लिए परिवर्तन शामिल हैं और मेरे सीमित परीक्षण के आधार पर ठीक से काम करना प्रतीत होता है।
डेविड
[Code]
//
// Enumeration used to specify a .NET framework version
//
type TDotNetFramework = (
DotNet_v11_4322, // .NET Framework 1.1
DotNet_v20_50727, // .NET Framework 2.0
DotNet_v30, // .NET Framework 3.0
DotNet_v35, // .NET Framework 3.5
DotNet_v4_Client, // .NET Framework 4.0 Client Profile
DotNet_v4_Full, // .NET Framework 4.0 Full Installation
DotNet_v45); // .NET Framework 4.5
//
// Checks whether the specified .NET Framework version and service pack
// is installed (See: http://www.kynosarges.de/DotNetVersion.html)
//
// Parameters:
// Version - Required .NET Framework version
// ServicePack - Required service pack level (0: None, 1: SP1, 2: SP2 etc.)
//
function IsDotNetInstalled(Version: TDotNetFramework; ServicePack: cardinal): boolean;
var
KeyName : string;
Check45 : boolean;
Success : boolean;
InstallFlag : cardinal;
ReleaseVer : cardinal;
ServiceCount : cardinal;
begin
// Registry path for the requested .NET Version
KeyName := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\';
case Version of
DotNet_v11_4322: KeyName := KeyName + 'v1.1.4322';
DotNet_v20_50727: KeyName := KeyName + 'v2.0.50727';
DotNet_v30: KeyName := KeyName + 'v3.0';
DotNet_v35: KeyName := KeyName + 'v3.5';
DotNet_v4_Client: KeyName := KeyName + 'v4\Client';
DotNet_v4_Full: KeyName := KeyName + 'v4\Full';
DotNet_v45: KeyName := KeyName + 'v4\Full';
end;
// .NET 3.0 uses "InstallSuccess" key in subkey Setup
if (Version = DotNet_v30) then
Success := RegQueryDWordValue(HKLM, KeyName + '\Setup', 'InstallSuccess', InstallFlag) else
Success := RegQueryDWordValue(HKLM, KeyName, 'Install', InstallFlag);
// .NET 4.0/4.5 uses "Servicing" key instead of "SP"
if (Version = DotNet_v4_Client) or
(Version = DotNet_v4_Full) or
(Version = DotNet_v45) then
Success := Success and RegQueryDWordValue(HKLM, KeyName, 'Servicing', ServiceCount) else
Success := Success and RegQueryDWordValue(HKLM, KeyName, 'SP', ServiceCount);
// .NET 4.5 is distinguished from .NET 4.0 by the Release key
if (Version = DotNet_v45) then
begin
Success := Success and RegQueryDWordValue(HKLM, KeyName, 'Release', ReleaseVer);
Success := Success and (ReleaseVer >= 378389);
end;
Result := Success and (InstallFlag = 1) and (ServiceCount >= ServicePack);
end;
यह बहुत अच्छा लग रहा है, लेकिन क्या आप यह भी दिखाएंगे कि चेक पैरामीटर से इसका उपयोग कैसे करें? – vidriduch
उपरोक्त फ़ंक्शन के बाद बस यह अधिकार जोड़ें: 'फ़ंक्शन IsDotNetReallyInstalled(): बूलियन; परिणाम शुरू करें: = IsDotNetInstalled (DotNet_v45, 0); अंत; ' फिर उसे अपने 'चेक' फ़ंक्शन में कॉल करें। –
क्षमा करें ... पैरामीटर जांचें: 'नहीं' जोड़ें ... IsDotNetInstalled –
आप परवाह नहीं है अगर "पूर्ण" या सिर्फ "क्लाइंट" .NET 4 के संस्करण स्थापित है:
try
ExpandConstant('{dotnet40}');
// Installed
except
// Not installed
end;
- 1. इनो-सेटअप
- 2. सेटअप परियोजना .NET 4.0
- 3. इनो सेटअप
- 4. इनो सेटअप
- 5. इनो-सेटअप
- 6. इनो सेटअप
- 7. इनो सेटअप
- 8. इनो सेटअप
- 9. इनो सेटअप
- 10. इनो सेटअप
- 11. इनो सेटअप
- 12. इनो सेटअप
- 13. इनो सेटअप
- 14. मैं इनो सेटअप स्क्रिप्ट
- 15. इनो सेटअप कस्टम पेज
- 16. इनो सेटअप अनइंस्टॉलर
- 17. इनो सेटअप RegAsm.exe त्रुटियां
- 18. क्या मैं इनो सेटअप
- 19. इनो सेटअप; वर्तमान आइकन
- 20. इनो सेटअप: TBitmapImage
- 21. इनो सेटअप - प्रोग्रेसगेज बार
- 22. इनो सेटअप स्क्रिप्ट
- 23. सत्यापित करें कि आईफोन
- 24. .NET 4.0 में .NET 2.0 नहीं है?
- 25. हुक मानक इनो सेटअप चेकबॉक्स
- 26. इनो-सेटअप: मौजूदा पृष्ठ प्रकार
- 27. इनो सेटअप: कस्टम इनपुट फ़ील्ड
- 28. इनो सेटअप में हाइपरलिंक कैसे दिखाएं?
- 29. .NET 4.0
- 30. इनो सेटअप विज़ार्ड बैनर में छवि बदलें
अच्छा। लेकिन मुझे स्थानीय (मेरे इंस्टॉल ऐप से) से फ्रेमवर्क 4.0 स्थापित करने की आवश्यकता है – Mediator
आपको बस उपरोक्त स्क्रिप्ट को आसानी से संशोधित करने में सक्षम होना चाहिए। आपको .NET Framework 4.0 इंस्टॉलर (या तो क्लाइंट प्रोफाइल या पूर्ण, जो भी आपके ऐप की आवश्यकता है) डाउनलोड करना होगा, और इसे अपने एप्लिकेशन के इंस्टॉलेशन मीडिया के साथ शामिल करना होगा। फिर, स्क्रिप्ट से, इंस्टॉलर लाने के लिए इंटरनेट पर जाने के बजाय, अपनी स्थापना स्रोत निर्देशिका से मौजूदा सेटअप फ़ाइल खोलें। या बस एक संदेश प्रदर्शित करें जो उपयोगकर्ता को ऐसा करने के लिए कहता है ("कृपया" NetFWSetup.exe "एप्लिकेशन पहले चलाएं")। –
"कृपया पहले" NetFWSetup.exe "एप्लिकेशन चलाएं" - और प्रोग्रामिंग इंस्टाल ऐसा नहीं करना है? – Mediator