Solved

Build Warning 4354 - InstallShield 2013 Limited Edition

Posted on 2014-12-04
18
850 Views
Last Modified: 2014-12-08
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.
0
Comment
Question by:mkacos
  • 10
  • 8
18 Comments
 
LVL 40

Expert Comment

by:Vadim Rapp
ID: 40481423
Looking at the path of your dll, it looks like this is managed .Net DLL exposed as COM object. Right?
0
 
LVL 1

Author Comment

by:mkacos
ID: 40481434
Correct.
0
 
LVL 40

Expert Comment

by:Vadim Rapp
ID: 40481483
Uncheck "Extract COM information" and instead check "COM Interop".

See http://helpnet.installshield.com/isxhelp20/Content/helplibrary/IDlgFilePropertiesComNetSettings.htm for more details.
0
 
LVL 1

Author Comment

by:mkacos
ID: 40481534
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
0
 
LVL 40

Expert Comment

by:Vadim Rapp
ID: 40482116
If Com Interop setting stays, maybe it's enough, despite the warning during build. Try if the installation works.
0
 
LVL 1

Author Comment

by:mkacos
ID: 40482771
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.
0
 
LVL 40

Expert Comment

by:Vadim Rapp
ID: 40482795
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?
0
 
LVL 1

Author Comment

by:mkacos
ID: 40482960
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
0
 
LVL 40

Expert Comment

by:Vadim Rapp
ID: 40483188
> 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?
0
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 
LVL 1

Author Comment

by:mkacos
ID: 40483430
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.
0
 
LVL 1

Author Comment

by:mkacos
ID: 40483798
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.
0
 
LVL 40

Accepted Solution

by:
Vadim Rapp earned 500 total points
ID: 40483815
> 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.

For that to work, you need to deploy not only dll but also tlb (either generated by visual studio, or by regasm /tlb:), and add reference to the tlb to your VBA/VB6 project.
0
 
LVL 1

Author Comment

by:mkacos
ID: 40483841
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.
0
 
LVL 40

Assisted Solution

by:Vadim Rapp
Vadim Rapp earned 500 total points
ID: 40483858
On my own experience I came to the conclusion that with .net-based com objects it's more reliable to use only late binding, i.e. no references, and everything by createobject; and accordingly use only simple parameters.

For convenience, I do use references during the development, exactly in order to have intellisense, but for the release I remove the reference, comment out Dim myobject as new mytype, uncomment dim myobject as object:set myobject=createobject("mytype").  Far less headache this way, and you don't have to deploy the tlb, which capable of creating conflicts between different versions, when you see error to the effect that the client application is expecting different version of the tlb.
0
 
LVL 1

Author Comment

by:mkacos
ID: 40483877
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.
0
 
LVL 1

Author Comment

by:mkacos
ID: 40486901
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.
0
 
LVL 40

Expert Comment

by:Vadim Rapp
ID: 40486917
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.
0
 
LVL 1

Author Closing Comment

by:mkacos
ID: 40486989
As usual, vadimrapp1 was incredibly helpful.
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Installations often have prerequisites, such as “Microsoft .Net framework is required for this product”. The usual implementation in MSI installations is system search for a particular registry setting representing the required prerequisite, followe…
If you don't know how to downgrade, my instructions below should be helpful.
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now