{"id":534,"date":"2008-07-09T10:41:19","date_gmt":"2008-07-09T09:41:19","guid":{"rendered":"http:\/\/soci.hu\/blog\/?p=534"},"modified":"2008-07-09T10:41:19","modified_gmt":"2008-07-09T09:41:19","slug":"kuzdelem-az-sql-server-2008-rc0-telepitovel-debug-war","status":"publish","type":"post","link":"https:\/\/soci.hu\/blog\/index.php\/2008\/07\/09\/kuzdelem-az-sql-server-2008-rc0-telepitovel-debug-war\/","title":{"rendered":"K\u00fczdelem az SQL Server 2008 RC0 telep\u00edt\u0151vel (debug war)"},"content":{"rendered":"<p>Hetek \u00f3ta nincs SQL Serverem (j\u00f3, id\u0151m se volt), mert nem ment fel az RC0. Egyes komponensek nem mentek fel, pl. a database engine, ami az\u00e9rt hi\u00e1nyzott.<br \/>\nA probl\u00e9ma oka nyilv\u00e1nval\u00f3an az volt, hogy fenn volt el\u0151tte a febru\u00e1ri CTP, ami odagan\u00e9zott a merevlemezre ide-oda.<br \/>\nEz\u00e9rt b\u0151szen neki\u00e1lltam fesz\u00edt\u0151vassal, l\u00e1ngv\u00e1g\u00f3val, \u00e9s kiszedtem az \u00e1ltalam azonos\u00edtott maradv\u00e1nyokat a registryb\u0151l, a f\u00e1jlrendszerb\u0151l, gacb\u00f3l. Erre ilyen hiba kezdett j\u00f6nni:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n2008-07-08 22:19:22 Slp: Microsoft.SqlServer.Setup.Chainer.Workflow.ActionExecutionException: MsiGetProductInfo failed to retrieve ProductVersion for package with Product Code = &#039;{7D3F6746-94DE-4E1F-94F9-933B68EB68C4}&#039;. Error code: 1605. ---&gt; System.InvalidOperationException: MsiGetProductInfo failed to retrieve ProductVersion for package with Product Code = &#039;{7D3F6746-94DE-4E1F-94F9-933B68EB68C4}&#039;. Error code: 1605.\r\n2008-07-08 22:19:22 Slp:    at Microsoft.SqlServer.Configuration.MsiExtension.SetFeatureInstallStateAction.FillInstallPropertyByProductCode(PackageInstallProperty pkg, String prodCode)\r\n2008-07-08 22:19:22 Slp:    at Microsoft.SqlServer.Configuration.MsiExtension.SetFeatureInstallStateAction.FillInstallProperty(PackageInstallProperty pkg)\r\n2008-07-08 22:19:22 Slp:    at Microsoft.SqlServer.Configuration.MsiExtension.SetFeatureInstallStateAction.ExecuteAction(String actionId)\r\n2008-07-08 22:19:22 Slp:    at Microsoft.SqlServer.Chainer.Infrastructure.Action.Execute(String actionId, TextWriter errorStream)\r\n2008-07-08 22:19:22 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.InvokeAction(WorkflowObject metabase, TextWriter statusStream)\r\n2008-07-08 22:19:22 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.PendingActions.InvokeActions(WorkflowObject metaDb, TextWriter loggingStream)\r\n<\/pre>\n<p>Google nem adott k\u00e9zzelfoghat\u00f3 eredm\u00e9nyt.<\/p>\n<p>Reflectorral megn\u00e9ztem, mi t\u00f6rt\u00e9nik ezekben a met\u00f3dusokban?<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nprivate void FillInstallPropertyByProductCode(PackageInstallProperty pkg, string prodCode); \r\nDeclaring Type: Microsoft.SqlServer.Configuration.MsiExtension.SetFeatureInstallStateAction \r\nAssembly: Microsoft.SqlServer.Configuration.MsiExtension, Version=10.0.0.0 \r\n<\/pre>\n<p>Ez a k\u00f3d a gyan\u00fas benne:<\/p>\n<p>errorCode = MsiNativeMethods.MsiGetProductInfo(pkg.ProductCode, &#8220;Language&#8221;, lpValueBuf, ref capacity);<br \/>\nif (errorCode != 0)<br \/>\n {<br \/>\n throw new InvalidOperationException(SR.MsiGetProductInfoFailedToRetrieveProductVesrionByProductCode(pkg.ProductCode, errorCode));<br \/>\n}<\/p>\n<p>Ismer valami ProductCode-ot, ennek akarja lek\u00e9rni a verzi\u00f3j\u00e1t, de nem siker\u00fcl, mert k\u00e9zzel m\u00e1r leirtottam a darabjait.<\/p>\n<p>Honnan veszi a beteg ProductCode-ot? CTRL-R, analyze. Itt h\u00edvj\u00e1k meg a fenti met\u00f3dust:<\/p>\n<p>private void FillInstallProperty(PackageInstallProperty pkg);<\/p>\n<p>Ebben:<\/p>\n<p>installedProductCodeList = this.msiMetadata.GetInstalledProductCodeList(packageAttributes);<br \/>\nif ((installedProductCodeList != null) &#038;&#038; (installedProductCodeList.Count > 0))<br \/>\n{<br \/>\n this.FillInstallPropertyByProductCode(pkg, installedProductCodeList[0]);<br \/>\n}<\/p>\n<p>Sz\u00f3val a GetInstalledProductCodeList adja vissza a rossz prod code-ot. \u0150 bel\u00fcl ezt h\u00edvja meg:<\/p>\n<p>errorCode = MsiNativeMethods.MsiEnumRelatedProducts(packageUpgradeCode, 0, iProductIndex, lpProductBuf);<\/p>\n<p>MsiEnumRelatedProducts, ez adja vissza a baroms\u00e1got. Ez m\u00e1r nat\u00edv f\u00fcggv\u00e9ny, az MSI.DLL-ben. El\u0151 a debuggerrel! Nem, nem a VS-re lesz sz\u00fcks\u00e9g, az kis gy\u00edk a nagytes\u00f3hoz, a WinDbg-hez k\u00e9pest, ehhez az kev\u00e9s.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nUINT MsiEnumRelatedProducts(\r\n  __in   LPCTSTR lpUpgradeCode,\r\n  __in   DWORD dwReserved,\r\n  __in   DWORD iProductIndex,\r\n  __out  LPTSTR lpProductBuf\r\n);\r\n<\/pre>\n<p>WinDbg-vel t\u00f6r\u00e9spont be\u00e1ll\u00edt a fenti f\u00fcggv\u00e9nyre. A t\u00f6r\u00e9sponthoz be lehet \u00e1ll\u00edtani akci\u00f3t a WinDbg-ben, ebben ki\u00edratom a f\u00fcggv\u00e9ny els\u0151 \u00e9s 4. param\u00e9ter\u00e9t, az 1-re keres r\u00e1, a 4.-ben j\u00f6n vissza a baroms\u00e1g.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nbu msi!MsiEnumRelatedProductsW+0x64 &quot;du poi(esp+0x4);du poi(esp+0x10);g&quot;\r\n<\/pre>\n<p>Ez a breakpoint szintax. Breapoint Unresolved (szimbolikus, fut\u00e1s k\u00f6zben oldja fel), az msi.dll MsiEnumRelatedProductsW f\u00fcggv\u00e9ny\u00e9re, de nem a bel\u00e9p\u00e9si pontj\u00e1ra, hanem 64h offsettel h\u00e1tr\u00e9bb (ez a f\u00fcggv\u00e9ny ret utas\u00edt\u00e1sa, az\u00e9rt ez kell, mert itt m\u00e1r ki van t\u00f6ltve a 4. param\u00e9ter).<br \/>\nAz akci\u00f3 r\u00e9sz id\u00e9z\u0151jelek k\u00f6z\u00f6tt van, ez fut le, ha becsap a t\u00f6r\u00e9spont. du: dump unicode data. A poi feloldja az ESP+4 c\u00edmet, onnan \u00edrjuk ki a stringet. Ugye ESP a visszat\u00e9r\u00e9si c\u00edmre mutat, ESP+4 az els\u0151 param\u00e9terre, ami egy LPCTSTR, eset\u00fcnkben LPCWSTR, ezt oldja fel a poi, a du meg k\u00ed\u00edratja. A 10h c\u00edmen van a 4. param\u00e9ter. A g parancs futtatja tov\u00e1bb a k\u00f3dot, azaz a t\u00f6r\u00e9spont val\u00f3j\u00e1ban csak ki\u00edrja a sz\u00e1momra sz\u00fcks\u00e9ges inf\u00f3kat, \u00e9s a program fut tov\u00e1bb.<\/p>\n<p>{65A00972-4629-4343-AAF7-9C35CE25CD84} erre k\u00e9rdeznek r\u00e1, \u00e9s {7D3F6746-94DE-4E1F-94F9-933B68EB68C4} r\u00e1 a v\u00e1lasz, pont, ami a hiba\u00fczenetben is j\u00f6tt.<\/p>\n<p>No, honnan a francb\u00f3l szedi fel a 65A00972&#8230; GUID-ot? B\u00e1rmennyire is bosszant\u00f3, se a f\u00e1jlrendszerben, se a registryben nem tal\u00e1ltam meg azt a k\u00f3dot. Fukk.<\/p>\n<p>El\u0151 a procmonnal. Ugye az a gond, hogy detekt\u00e1l valami darabk\u00e1t egy kor\u00e1bbi verzi\u00f3b\u00f3l, de az MSI-ket m\u00e1r nem leli hozz\u00e1. Be\u00e1ll\u00edtottam sz\u0171r\u00e9si felt\u00e9telt, hogy a setup100.exe process n\u00e9v \u00e9s a Path tartalmazza az UpgradeCode stringet. Kider\u00fclt, hogy miut\u00e1n megtal\u00e1lja ezt:<br \/>\nHKEY_CLASSES_ROOT\\Installer\\UpgradeCodes\\27900A5692643434AA7FC953EC52DC48<br \/>\nle\u00e1ll a telep\u00edt\u00e9s. Ezek szerint ez valami kor\u00e1bbi SQL Server verzi\u00f3 darabja lehet. \u00c1tneveztem ezt kicsit, hogy ne tal\u00e1lja meg a telep\u00edt\u0151. Ett\u0151l tov\u00e1bbment a telep\u00edt\u0151, de befagyott. Kiirtottam az \u00f6sszes keresett UpgradeCode-ot \u00e9s voal\u00e1, sikeresen felment a szerver.<\/p>\n<p>Finny\u00e1s egy kis k\u00f6cs\u00f6g lett ez a verzi\u00f3. J\u00f3, tudom, nem illik sz\u00e9tszabni k\u00e9zzel a registry-t, de akkor is. :)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hetek \u00f3ta nincs SQL Serverem (j\u00f3, id\u0151m se volt), mert nem ment fel az RC0. Egyes komponensek nem mentek fel, pl. a&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,18,4,30,58],"tags":[],"class_list":["post-534","post","type-post","status-publish","format-standard","hentry","category-adatbazisok","category-debugging","category-szakmai-elet","category-sql-server","category-sql-server-2008"],"_links":{"self":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=534"}],"version-history":[{"count":0,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/534\/revisions"}],"wp:attachment":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}