में एक्शन अनुक्रम रिकॉर्ड बदलने के लिए स्क्रिप्ट listed here समस्या को हल करने के लिए मुझे InstallExecuteSequence को बदलना होगा। RemoveExistingProducts एक MSI में रिकॉर्ड करता है।एक एमएसआई
मैं चारों ओर ओर्का
साथ MSI_SetProperty.js स्क्रिप्ट muckingमें एक्शन अनुक्रम रिकॉर्ड बदलने के लिए स्क्रिप्ट listed here समस्या को हल करने के लिए मुझे InstallExecuteSequence को बदलना होगा। RemoveExistingProducts एक MSI में रिकॉर्ड करता है।एक एमएसआई
मैं चारों ओर ओर्का
साथ MSI_SetProperty.js स्क्रिप्ट muckingको संशोधित करने के बजाय निर्माण प्रक्रिया के हिस्से के रूप में ऐसा करना चाहते
// MSI_SetActionSequence.js <msi-file> <table> <action> <sequence>
// Performs a post-build fixup of an msi to set the specified table/action/sequence
// Constant values from Windows Installer SDK
var msiOpenDatabaseModeTransact = 1;
var msiViewModifyInsert = 1;
var msiViewModifyUpdate = 2;
var msiViewModifyAssign = 3;
var msiViewModifyReplace = 4;
var msiViewModifyDelete = 6;
if (WScript.Arguments.Length != 4)
{
WScript.StdErr.WriteLine("Usage: " + WScript.ScriptName + " file table action sequence");
WScript.Quit(1);
}
var filespec = WScript.Arguments(0);
var table = WScript.Arguments(1);
var action = WScript.Arguments(2);
var sequence = parseInt(WScript.Arguments(3));
var installer = WScript.CreateObject("WindowsInstaller.Installer");
var database = installer.OpenDatabase(filespec, msiOpenDatabaseModeTransact);
WScript.StdOut.WriteLine("Looking for action:" + action);
try
{
var sql = "SELECT Action, Sequence FROM " + table + " WHERE Action = '" + action + "'";
var view = database.OpenView(sql);
view.Execute();
var record = view.Fetch();
if (record)
{
while (record)
{
WScript.StdOut.Write("Found: " + record.StringData(0) + ", " + record.StringData(1) + ", " + record.StringData(2));
if (record.IntegerData(2) != sequence)
{
WScript.StdOut.WriteLine(" - changing to " + sequence);
record.IntegerData(2) = sequence;
view.Modify(msiViewModifyUpdate,record);
}
else
WScript.StdOut.WriteLine(" - OK");
record = view.Fetch();
}
view.Close();
database.Commit();
}
else
{
view.Close();
throw("Warning - Could not find " + table + "." + action);
}
}
catch(e)
{
WScript.StdErr.WriteLine(e);
WScript.Quit(1);
}
कार्रवाई करने के लिए परिवर्तन प्रदर्शन करने के लिए इस स्क्रिप्ट कॉल करने के लिए देता है ऊपर वर्णित अनुक्रम आप निम्नलिखित को बैच फ़ाइल में डाल देंगे और पोस्ट बिल्ड इवेंट उदा PostBuildEvent = $ (ProjectDir) PostBuild.bat
cscript.exe MSI_SetActionSequence.js YOURINSTALLER.MSI InstallExecuteSequence RemoveExistingProducts 1525
का डुप्लिकेट है एमएस लिंक भी इंस्टॉलएक्सक्यूट को हटाने का उल्लेख करता है लाइन। क्या यह आवश्यक है? – RBear
एआरएम - एमएस लिंक क्या है? मैं इसे एक वर्ष से अधिक के लिए उपयोग कर रहा हूं, ऐसा लगता है कि ठीक काम करता है। – Ryan
आपकी दूसरी पोस्ट में से एक जो आप शीर्ष पर लिंक करते हैं http://social.msdn.microsoft.com/forums/en-US/winformssetup/thread/519faa07-5b4e-4546-bfb3-6f233bf7286f सीम किसी भी तरह से काम करने के लिए। – RBear
कुछ अन्य लोगों को कुछ नोट्स। मेरे पास "त्रुटि 1001 थी। निर्दिष्ट सेवा पहले से मौजूद है" समस्या, और उपरोक्त कोशिश की और यह काम नहीं कर रहा था। यहां मैंने जो किया है:
* सुनिश्चित करें कि आपके इंस्टॉलर प्रोजेक्ट पर RemovePreviousVersions प्रॉपर्टी सत्य पर सेट है। यह स्पष्ट प्रतीत होता है - स्पष्ट, यानी, यदि आप इसके बारे में जानते हैं। डिफ़ॉल्ट रूप से यह गलत पर सेट है। यदि गलत है, तो उपर्युक्त प्रक्रिया आपकी समस्या का समाधान नहीं करेगी। *
मेरे पास जीएसी में कुछ असेंबली स्थापित हैं। ऐसा प्रतीत होता है कि जब मैंने RemoveExistingProducts अनुक्रम को स्थानांतरित किया था कि इन फ़ाइलों को GAC से हटा दिया गया था, लेकिन पुनर्स्थापित नहीं किया गया था। इसे हल करने के लिए मैंने एप्लिकेशन फ़ोल्डर में सभी असेंबली स्थापित की। एफवाईआई, मैं वीएस -2010 का उपयोग कर रहा हूं।
इसके अलावा, एक और नाइट-पिक। यदि कोई उत्पाद किसी उत्पाद के उसी संस्करण को पुनर्स्थापित करने का प्रयास करते समय "मरम्मत" का चयन करता है, तो उन्हें अभी भी "निर्दिष्ट सेवा पहले से मौजूद" त्रुटि मिल जाएगी। अगर मुझे समय मिलता है तो मैं इसे ठीक करने की कोशिश करूंगा। अगर वहां कोई और जानता है कि इसे कैसे ठीक किया जाए, तो क्या आप पोस्ट कर सकते हैं?
यह सब कहा, इसे पोस्ट करने के लिए धन्यवाद!
रायन द्वारा प्रदान किया गया समाधान उस मुद्दे का हिस्सा है जिसका सामना मैं कर रहा हूं। यह इंस्टॉल के बाद, पूर्ण अनइंस्टॉल करता है।
हालांकि, मेरे पास एक और मुद्दा है, मेरे मामले में कुछ कार्यक्रम पृष्ठभूमि में चल रहे हैं। इंस्टॉलर चलने से पहले, इंस्टॉलर शिकायत करता है कि कुछ फाइलें उपयोग में हैं। और मानक संवाद बॉक्स को या तो एप्लिकेशन को बंद करने के लिए पूछता है, या अपडेट को पूरा करने के लिए पुनरारंभ करता है।
क्या कोई तरीका है, उदाहरण के लिए। पृष्ठभूमि में चल रही प्रक्रियाओं को मारने के लिए एक कस्टम एक्शन या सेटिंग, ताकि इंस्टॉलर आसानी से चला जाए?
आप इसे एक उत्तर के रूप में यहां पोस्ट करने के बजाय अपने स्वयं के प्रश्न के रूप में पूछने से बेहतर हैं - एफएक्यू के शीर्ष दाएं को देखें। – Ryan
http://stackoverflow.com/questions/370940/visual-studio-2008-service-installer-project-upgrade-issue भी शामिल है, जो उद्धृत प्रश्न –