Link to home
Start Free TrialLog in
Avatar of Michael Kacos
Michael KacosFlag for United States of America

asked on

Build Warning 4354 - InstallShield 2013 Limited Edition

I am receiving Warning 3 -4354: The build was unable to extract COM information from the file C:\Users\mkacos.ITC\Source\Workspaces\Workspace\ITC DLL\ITCClass\bin\Debug\ITCClass.dll in component C__199FB86F13E94D9B8FCFF517C045DAEE. Please ensure that the file is self-registering and verify that the self-registration process does not fail. ISEXP : warning : -4354: The build was unable to extract COM information from the file C:\Users\mkacos.ITC\Source\Workspaces\Workspace\ITC DLL\ITCClass\bin\Debug\ITCClass.dll in component C__199FB86F13E94D9B8FCFF517C045DAEE. Please ensure that the file is self-registering and verify that the self-registration process does not fail.


 The page that displays when I click on the warning message says: "The 'IsCmdBld.exe' file is the utility used by InstallShield to perform builds. In certain cases, it's possible that the Windows Operating System will not grant 'IsCmdBld.exe' the access it needs to complete certain operations of the build process. " Which, based on what we have experienced so far makes sense.

 I cannot find the "IsCmdBld.EXE" file. I have found where it should be located (Installshield System Folder) but it is not there. I did a search of my hard drive and it is not to be found. Could this be my issue? I need help on this one.

If I ignore this and install the DLL the interface is not working. For example, this DLL is used in an Access 2010 MDB application.  I cannot see the properties of the DLL.
Avatar of Vadim Rapp
Vadim Rapp
Flag of United States of America image

Looking at the path of your dll, it looks like this is managed .Net DLL exposed as COM object. Right?
Avatar of Michael Kacos

ASKER

Correct.
Uncheck "Extract COM information" and instead check "COM Interop".

See http://helpnet.installshield.com/isxhelp20/Content/helplibrary/IDlgFilePropertiesComNetSettings.htm for more details.
It will not let me do that.   I can change the properties and click apply, open the properties back up and they are set back to "Extract Com Information".  See doc attached.
ExtractComIssue1.docx
If Com Interop setting stays, maybe it's enough, despite the warning during build. Try if the installation works.
The installation does not work.  When I try it, the properties are not exposed and if I ignore that, the results from known tests are incorrect.
Open resulting msi file in Orca and check if tables Registry and Class are populated. The best if you could make separate installation with just this dll and nothing else, to isolate the problem.

Also, once the installation is deployed and the dll does not work, go and register the dll manually, by running regasm. Will it work them?
I do not have ORCA.  I renamed the MSI to TXT and attached it.

I ran the manual regasm and the results did not change.

When I tried it at first, I received a message saying I had to have administrator rights.  Then I reopened a CMD prompt as administrator.  The regasm seemed to work however the properties are still not exposed.  I am a member of the domain administers group.

The warning message in VSS takes me to https://flexeracommunity.force.com/customer/articles/en_US/ERRDOC/Build-Warning-4354.  It indicates that I need to run ISCmdBLD.exe in compatibility mode.
itc.txt
> I ran the manual regasm and the results did not change.

Then you should stop right there, and find the reason. The installation can't do more than regasm, so if that does not work, it means that the problem is with the dll itself.

Looking at the msi, itcclass.dll appears to have all COM information in place. I could not actually test it because your msi relies on external files to install, rather than having them packed inside the msi.

How do you know it does not work? create this vbscript:

set o = createobject("ITCCLASS.Customer")

Save it as myscript.vbs and run after the installation. Will you see error message that the object could not be created?
I can already answer that:
The Object gets created and I can execute functions that are in the DLL.
However, the properties and functions are not exposed and the results from several of those functions are not correct.  These are results that have survived the test of time and produce the correct results under the previous installation.

 Dim ITCCode As ITCClass.ITCCom
 Set ITCCode = New ITCClass.ITCCom

What I mean by exposed: While coding, I can type "ITCCode."  and the public properties and functions are listed where under the new install, there are no properties or functions.
Well, I have tried several things and am now getting the Active X Component can't create the object.  This is in my VB code, not VB script.
ASKER CERTIFIED SOLUTION
Avatar of Vadim Rapp
Vadim Rapp
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
I agree. You had helped me a couple of months ago to get another issue resolved.  Unfortunately, at the time, I thought everything was perfect.  Going through this exercise,  I noticed that the TLB file that was being deployed was outdated.  That did not raise it's ugly head until I had to add another property which started all of this.
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
OK, I just did that in one section of the code and it worked (got rid of the "Active X Component can't create the object" error message.

I am putting this away for the weekend and will get back to it on Monday.  I'll let you know if the new properties work next week.
I am still getting the build warning however it now looks like it does not matter anymore.

I took the TLB file that was built by VS and copied it to another folder.  Then I pointed the install project to that TLB file and built just the installation package.  

Everything works including intellisense on 64 and 32 bit machines.  

The only issue I see is on one 32 bit machine (development machine) when list the references in Access VB, it is listed twice in the reference list.  Probably something with the registry but everything works.

I am not sure which comment to mark as the solution since your last two comments pointed me to this.
I think ID: 40483815 is closest to what can be called a solution. Though you can split between the two.

Re. testing: always make sure to try it out on a clean machine. Have a set of virtual machines representing all architectures, with saved snapshots so can you quickly reset to the initial clean state; and try on each one. There's no limit to the degree of how previous installations can contaminate things - not to mention the development.
As usual, vadimrapp1 was incredibly helpful.