हाल ही में मुझे Ketarin के माध्यम से स्थापित करने की आवश्यकता है। मुझे लगता है कि यह डिफ़ॉल्ट पथ (%ProgramFiles(x86)%\Natural Docs
) में स्थापित किया गया था, लेकिन मैंने एक सुरक्षित दृष्टिकोण लेने का फैसला किया। अफसोस की बात है, भले ही इंस्टॉलर ने HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
पर एक कुंजी बनाई, भले ही इसका कोई भी मूल्य मुझे स्थापित डीआईआर ढूंढने के लिए प्रेरित न करे।
स्टीन उत्तर ऐपशर्च एमएसआई फ़ंक्शन का सुझाव देता है, और यह दिलचस्प लग रहा है, लेकिन दुख की बात है कि प्राकृतिक डॉक्स एमएसआई इंस्टॉलर अपने दृष्टिकोण कार्यों में हस्ताक्षर तालिका प्रदान नहीं करता है।
इसलिए मैंने प्राकृतिक डॉक्स इंस्टॉल डीआईआर के किसी भी संदर्भ को खोजने के लिए रजिस्ट्री के माध्यम से खोज करने का निर्णय लिया, और मुझे HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components
कुंजी में से एक मिला।
मैं Ketarin के लिए सी # कि प्रत्यावर्तन की अनुमति देता है में एक रेग कक्षा का विकास किया।तो मैं HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components
के माध्यम से सभी मानों को देखता हूं और यदि मुख्य अनुप्रयोग निष्पादन योग्य (NaturalDocs.exe) उपकुंजी मानों में से एक में पाया जाता है, तो यह निकाला जाता है (C:\Program Files (x86)\Natural Docs\NaturalDocs.exe
C:\Program Files (x86)\Natural Docs
बन जाता है) और यह सिस्टम पर्यावरण चर% PATH% में जोड़ा गया है (इसलिए मैं कॉल कर सकता हूं " NaturalDocs.exe "सीधे पूर्ण पथ का उपयोग करने के बजाय)।
रजिस्ट्री "वर्ग" (काम करता है, वास्तव में) GitHub (RegClassCS) पर पाया जा सकता।
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo("NaturalDocs.exe", "-h");
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
var process = System.Diagnostics.Process.Start (startInfo);
process.WaitForExit();
if (process.ExitCode != 0)
{
string Components = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components";
bool breakFlag = false;
string hKeyName = "HKEY_LOCAL_MACHINE";
if (Environment.Is64BitOperatingSystem)
{
hKeyName = "HKEY_LOCAL_MACHINE64";
}
string[] subKeyNames = RegGetSubKeyNames(hKeyName, Components);
// Array.Reverse(subKeyNames);
for(int i = 0; i <= subKeyNames.Length - 1; i++)
{
string[] valueNames = RegGetValueNames(hKeyName, subKeyNames[i]);
foreach(string valueName in valueNames)
{
string valueKind = RegGetValueKind(hKeyName, subKeyNames[i], valueName);
switch(valueKind)
{
case "REG_SZ":
// case "REG_EXPAND_SZ":
// case "REG_BINARY":
string valueSZ = (RegGetValue(hKeyName, subKeyNames[i], valueName) as String);
if (valueSZ.IndexOf("NaturalDocs.exe") != -1)
{
startInfo = new System.Diagnostics.ProcessStartInfo("setx", "path \"%path%;" + System.IO.Path.GetDirectoryName(valueSZ) + "\" /M");
startInfo.Verb = "runas";
process = System.Diagnostics.Process.Start (startInfo);
process.WaitForExit();
if (process.ExitCode != 0)
{
Abort("SETX failed.");
}
breakFlag = true;
}
break;
/*
case "REG_MULTI_SZ":
string[] valueMultiSZ = (string[])RegGetValue("HKEY_CURRENT_USER", subKeyNames[i], valueKind);
for(int k = 0; k <= valueMultiSZ.Length - 1; k++)
{
Ketarin.Forms.LogDialog.Log("valueMultiSZ[" + k + "] = " + valueMultiSZ[k]);
}
break;
*/
default:
break;
}
if (breakFlag)
{
break;
}
}
if (breakFlag)
{
break;
}
}
}
भले ही आप Ketarin का उपयोग नहीं करते, आप आसानी से समारोह पेस्ट और विजुअल स्टूडियो या CSC के माध्यम से निर्माण कर सकते हैं।
RegClassVBS का उपयोग करके एक और सामान्य दृष्टिकोण लिया जा सकता है जो रजिस्ट्री कुंजी रिकर्सन की अनुमति देता है और .NET Framework प्लेटफ़ॉर्म या निर्माण प्रक्रियाओं पर निर्भर नहीं करता है।
कृपया ध्यान दें कि अवयव कुंजी की गणना करने की प्रक्रिया सीपीयू तीव्र हो सकता है। उदाहरण के ऊपर एक लंबाई पैरामीटर है, कि आप उपयोगकर्ता के लिए कुछ प्रगति (शायद "(subKeysName.Length से मैं - 1) कुंजी शेष" - की तरह कुछ रचनात्मक होना) को दिखाने के लिए उपयोग कर सकते हैं। RegClassVBS में एक समान दृष्टिकोण लिया जा सकता है।
दोनों वर्गों (RegClassCS और RegClassVBS) प्रलेखन और उदाहरण है कि आप मार्गदर्शन कर सकते हैं, और आप किसी भी सॉफ्टवेयर में इसका इस्तेमाल करते हैं और उनमें से विकास में योगदान कर सकते हैं एक Git रेपो पर प्रतिबद्ध रही है, और (बेशक) एक खोलने यदि आपको कोई समस्या है जो आप स्वयं को हल नहीं कर पा रहे हैं तो इस गिटब पृष्ठों पर समस्याएं ताकि हम इस मुद्दे को पुन: उत्पन्न करने का प्रयास कर सकें ताकि हम यह जान सकें कि हम इसके बारे में क्या कर सकते हैं। =)
मैंने इसे नहीं किया है, इसलिए मुझे अभी भी यह जानने की ज़रूरत है कि निर्देशिका कैसे प्राप्त करें ... –
आप एमएसआई फ़ाइल बनाने के लिए क्या उपयोग कर रहे हैं, प्रत्येक भाषा में यह जानकारी प्राप्त करने के लिए यह विनिर्देश होगा – CheGueVerra
I ' मैंने इसे इंस्टॉलशील्ड 11.5 के साथ बनाया है (मुझे पता है कि यह पुराना है ...)। बेसिकएमएसआई परियोजना। –