|
|||||||
![]() |
|
|
LinkBack | Thread Tools | Display Modes |
|
|
#1 (permalink) |
|
Guest
Posts: n/a
|
I have a problem on Vista where my COM DLLs don't register (HRESULT =
0x800736B1) .. after Googling it seems this is caused by the C runtime not being installed. (All other DLLs that are compiled with VC8 or supplied by others register fine.) My installer also works fine on Windows XP. I install the VC8 runtime stuff with the merge modules <Directory Id="TARGETDIR" Name="SourceDir"> <Merge Id="VC8Runtime" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC80_CRT_x86.msm" Language="1033" DiskId="1"/> <Merge Id="VC8Policy" SourceFile="C:\Program Files\Common Files\Merge Modules\policy_8_0_Microsoft_VC80_CRT_x86.msm" Language="1033" DiskId="1"/> <Merge Id="MFCRuntime" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC80_MFC_x86.msm" Language="1033" DiskId="1"/> <Merge Id="MFCPolicy" SourceFile="C:\Program Files\Common Files\Merge Modules\policy_8_0_Microsoft_VC80_MFC_x86.msm" Language="1033" DiskId="1"/> .... And use SelfRegCost="1" to get the COM DLLs to register. PS: I have three DLL component to install,and two of them have no problem using SelfReg ,and only one have problem using SelfReg. When i installed "vcredist_x86.exe", all of the three DLL component have no problem using SelfReg. What's the trick to getting this to work on Vista? Thanks |
|
|
|
#2 (permalink) |
|
Guest
Posts: n/a
|
The trick is to get the C++ runtime installed on the system first! Vista
uses fusion (.NET if you like) to install the C++ runtime (previous OS versions did not), and as a result the runtime Dlls are not available until the install is finished (InstallFinalize). -- Phil Wilson Definitive Guide to Windows Installer http://www.apress.com/book/view/1590592972 "Richard" <Richard@discussions.microsoft.com> wrote in message news:23AF4D87-1C37-439B-A3E7-5AA9DF54E5D2@microsoft.com... >I have a problem on Vista where my COM DLLs don't register (HRESULT = > 0x800736B1) .. after Googling it seems this is caused by the C runtime not > being installed. (All other DLLs that are compiled with VC8 or supplied > by > others register fine.) > > My installer also works fine on Windows XP. > > I install the VC8 runtime stuff with the merge modules > > <Directory Id="TARGETDIR" Name="SourceDir"> > > <Merge Id="VC8Runtime" SourceFile="C:\Program Files\Common > Files\Merge Modules\Microsoft_VC80_CRT_x86.msm" Language="1033" > DiskId="1"/> > > <Merge Id="VC8Policy" SourceFile="C:\Program Files\Common > Files\Merge Modules\policy_8_0_Microsoft_VC80_CRT_x86.msm" Language="1033" > DiskId="1"/> > <Merge Id="MFCRuntime" SourceFile="C:\Program Files\Common > Files\Merge Modules\Microsoft_VC80_MFC_x86.msm" Language="1033" > DiskId="1"/> > > <Merge Id="MFCPolicy" SourceFile="C:\Program Files\Common > Files\Merge Modules\policy_8_0_Microsoft_VC80_MFC_x86.msm" Language="1033" > DiskId="1"/> > ... > > And use SelfRegCost="1" to get the COM DLLs to register. > > PS: I have three DLL component to install,and two of them have no problem > using SelfReg ,and only one have problem using SelfReg. When i installed > "vcredist_x86.exe", all of the three DLL component have no problem using > SelfReg. > > What's the trick to getting this to work on Vista? > > Thanks > > |
|
|
|
#3 (permalink) |
|
Guest
Posts: n/a
|
Thanks very much, Phil Wilson.
So I must get the C++ runtime installed on Vista system first. have you other tricks without installing C++ runtime on system first? Thanks "Phil Wilson" wrote: > The trick is to get the C++ runtime installed on the system first! Vista > uses fusion (.NET if you like) to install the C++ runtime (previous OS > versions did not), and as a result the runtime Dlls are not available until > the install is finished (InstallFinalize). > > -- > Phil Wilson > Definitive Guide to Windows Installer > http://www.apress.com/book/view/1590592972 > > > "Richard" <Richard@discussions.microsoft.com> wrote in message > news:23AF4D87-1C37-439B-A3E7-5AA9DF54E5D2@microsoft.com... > >I have a problem on Vista where my COM DLLs don't register (HRESULT = > > 0x800736B1) .. after Googling it seems this is caused by the C runtime not > > being installed. (All other DLLs that are compiled with VC8 or supplied > > by > > others register fine.) > > > > My installer also works fine on Windows XP. > > > > I install the VC8 runtime stuff with the merge modules > > > > <Directory Id="TARGETDIR" Name="SourceDir"> > > > > <Merge Id="VC8Runtime" SourceFile="C:\Program Files\Common > > Files\Merge Modules\Microsoft_VC80_CRT_x86.msm" Language="1033" > > DiskId="1"/> > > > > <Merge Id="VC8Policy" SourceFile="C:\Program Files\Common > > Files\Merge Modules\policy_8_0_Microsoft_VC80_CRT_x86.msm" Language="1033" > > DiskId="1"/> > > <Merge Id="MFCRuntime" SourceFile="C:\Program Files\Common > > Files\Merge Modules\Microsoft_VC80_MFC_x86.msm" Language="1033" > > DiskId="1"/> > > > > <Merge Id="MFCPolicy" SourceFile="C:\Program Files\Common > > Files\Merge Modules\policy_8_0_Microsoft_VC80_MFC_x86.msm" Language="1033" > > DiskId="1"/> > > ... > > > > And use SelfRegCost="1" to get the COM DLLs to register. > > > > PS: I have three DLL component to install,and two of them have no problem > > using SelfReg ,and only one have problem using SelfReg. When i installed > > "vcredist_x86.exe", all of the three DLL component have no problem using > > SelfReg. > > > > What's the trick to getting this to work on Vista? > > > > Thanks > > > > > > > |
|
|
|
#4 (permalink) |
|
Guest
Posts: n/a
|
The only real trick is the usual one, which is to avoid calling
self-registration at install time. If thje registration data is in Class, Registry, Typelib tables then self-registration isn't required. Rule 19: http://blogs.msdn.com/windows_instal...12/595950.aspx A common issue is that it requires people to know what their registration data really is, instead of it being a black box piece of code you call that just does it. -- Phil Wilson Definitive Guide to Windows Installer http://www.apress.com/book/view/1590592972 "Richard" <Richard@discussions.microsoft.com> wrote in message news:9EAE9A7E-8782-4DDE-AB82-1CB9D148F04F@microsoft.com... > Thanks very much, Phil Wilson. > So I must get the C++ runtime installed on Vista system first. have you > other tricks without installing C++ runtime on system first? > > Thanks > > "Phil Wilson" wrote: > >> The trick is to get the C++ runtime installed on the system first! Vista >> uses fusion (.NET if you like) to install the C++ runtime (previous OS >> versions did not), and as a result the runtime Dlls are not available >> until >> the install is finished (InstallFinalize). >> >> -- >> Phil Wilson >> Definitive Guide to Windows Installer >> http://www.apress.com/book/view/1590592972 >> >> >> "Richard" <Richard@discussions.microsoft.com> wrote in message >> news:23AF4D87-1C37-439B-A3E7-5AA9DF54E5D2@microsoft.com... >> >I have a problem on Vista where my COM DLLs don't register (HRESULT = >> > 0x800736B1) .. after Googling it seems this is caused by the C runtime >> > not >> > being installed. (All other DLLs that are compiled with VC8 or >> > supplied >> > by >> > others register fine.) >> > >> > My installer also works fine on Windows XP. >> > >> > I install the VC8 runtime stuff with the merge modules >> > >> > <Directory Id="TARGETDIR" Name="SourceDir"> >> > >> > <Merge Id="VC8Runtime" SourceFile="C:\Program Files\Common >> > Files\Merge Modules\Microsoft_VC80_CRT_x86.msm" Language="1033" >> > DiskId="1"/> >> > >> > <Merge Id="VC8Policy" SourceFile="C:\Program Files\Common >> > Files\Merge Modules\policy_8_0_Microsoft_VC80_CRT_x86.msm" >> > Language="1033" >> > DiskId="1"/> >> > <Merge Id="MFCRuntime" SourceFile="C:\Program Files\Common >> > Files\Merge Modules\Microsoft_VC80_MFC_x86.msm" Language="1033" >> > DiskId="1"/> >> > >> > <Merge Id="MFCPolicy" SourceFile="C:\Program Files\Common >> > Files\Merge Modules\policy_8_0_Microsoft_VC80_MFC_x86.msm" >> > Language="1033" >> > DiskId="1"/> >> > ... >> > >> > And use SelfRegCost="1" to get the COM DLLs to register. >> > >> > PS: I have three DLL component to install,and two of them have no >> > problem >> > using SelfReg ,and only one have problem using SelfReg. When i >> > installed >> > "vcredist_x86.exe", all of the three DLL component have no problem >> > using >> > SelfReg. >> > >> > What's the trick to getting this to work on Vista? >> > >> > Thanks >> > >> > >> >> >> |
|
|
|
#5 (permalink) |
|
Guest
Posts: n/a
|
If you're only targeting Vista or higher systems (may also work on XP but
won't work on 2K): I think you can also install the C++ runtime files as private assemblies to your application (TARGETDIR) folder by adding the appropriate folder located under the [VS2005_TARGETDIR]\VC\REDIST\ [X86 || AMD64]\ folder. See the [VS2005_TARGETDIR]\redist.txt for what file bundles to include in your install. -- Colby "Richard" wrote: > Thanks very much, Phil Wilson. > So I must get the C++ runtime installed on Vista system first. have you > other tricks without installing C++ runtime on system first? > > Thanks > > "Phil Wilson" wrote: > > > The trick is to get the C++ runtime installed on the system first! Vista > > uses fusion (.NET if you like) to install the C++ runtime (previous OS > > versions did not), and as a result the runtime Dlls are not available until > > the install is finished (InstallFinalize). > > > > -- > > Phil Wilson > > Definitive Guide to Windows Installer > > http://www.apress.com/book/view/1590592972 > > > > > > "Richard" <Richard@discussions.microsoft.com> wrote in message > > news:23AF4D87-1C37-439B-A3E7-5AA9DF54E5D2@microsoft.com... > > >I have a problem on Vista where my COM DLLs don't register (HRESULT = > > > 0x800736B1) .. after Googling it seems this is caused by the C runtime not > > > being installed. (All other DLLs that are compiled with VC8 or supplied > > > by > > > others register fine.) > > > > > > My installer also works fine on Windows XP. > > > > > > I install the VC8 runtime stuff with the merge modules > > > > > > <Directory Id="TARGETDIR" Name="SourceDir"> > > > > > > <Merge Id="VC8Runtime" SourceFile="C:\Program Files\Common > > > Files\Merge Modules\Microsoft_VC80_CRT_x86.msm" Language="1033" > > > DiskId="1"/> > > > > > > <Merge Id="VC8Policy" SourceFile="C:\Program Files\Common > > > Files\Merge Modules\policy_8_0_Microsoft_VC80_CRT_x86.msm" Language="1033" > > > DiskId="1"/> > > > <Merge Id="MFCRuntime" SourceFile="C:\Program Files\Common > > > Files\Merge Modules\Microsoft_VC80_MFC_x86.msm" Language="1033" > > > DiskId="1"/> > > > > > > <Merge Id="MFCPolicy" SourceFile="C:\Program Files\Common > > > Files\Merge Modules\policy_8_0_Microsoft_VC80_MFC_x86.msm" Language="1033" > > > DiskId="1"/> > > > ... > > > > > > And use SelfRegCost="1" to get the COM DLLs to register. > > > > > > PS: I have three DLL component to install,and two of them have no problem > > > using SelfReg ,and only one have problem using SelfReg. When i installed > > > "vcredist_x86.exe", all of the three DLL component have no problem using > > > SelfReg. > > > > > > What's the trick to getting this to work on Vista? > > > > > > Thanks > > > > > > > > > > > > |
|
|
|
#6 (permalink) |
|
Guest
Posts: n/a
|
I had to run some utils as part of the installation and which require
the runtimes to be available. Since they require system privileges they won't work as an immediate action after Installfinalize. The only option that worked for me was to make my actions commit actions scheduled just before installfinalize. I think this is down to the fact that the C++ runtimes are not logically installed into the sxs folders until VERY late in the installation process. It's not ideal as a commit action can't be rolled back. The only other way to work around this is to make the C++ runtimes a prerequisite of your installer rather than using merge modules. |
|
|
|
#7 (permalink) |
|
Guest
Posts: n/a
|
just recently we had to add the VC8 redist to an install. The client
had an old copy of Intallshield that he wanted to use to rebuild the install when he updated the files. the msm was a disaster. it had this problem the file count is higher than what the compressed cab says it is after the merge module is added. This is a known issue with later Installshield products so it is not surprising it is also with the earlier ones. see http://kb.acresso.com/selfservice/vi...rnalID=Q107481 what we did as to do sxs install. We had folders of the required runtimes next to the app exe. see http://msdn.microsoft.com/en-us/libr...16(VS.80).aspx Sincerely, Joe Mele 631 615 7213 Youseful Software www.youseful.com linkedin profile: http://www.linkedin.com/in/joemele FileMaker Business Allaince Member Embarcadero Technology Partner Uniloc Implementation Partner On Apr 15, 3:17*am, sm_sp...@hotmail.com wrote: > I had to run some utils as part of the installation and which require > the runtimes to be available. Since they require system privileges > they won't work as an immediate action after Installfinalize. The only > option that worked for me was to make my actions commit actions > scheduled just before installfinalize. I think this is down to the > fact that the C++ runtimes are not logically installed into the sxs > folders until VERY late in the installation process. It's not ideal as > a commit action can't be rolled back. > > The only other way to work around this is to make the C++ runtimes a > prerequisite of your installer rather than using merge modules. |
|