/build/static/layout/Breadcrumb_cap_w.png

New, free "Orca-like" database-centric msi editor

There's a new free database-centric msi editor being developed over at

http://www.instedit.com/

Just found this a few days ago and after testing it I feel it would most likely be of great value to those of us that use this kind of workflow. Based on the blog posts on the site, the feature list and the online help it's easy to see that this guy knows his stuff. It's almost like he's read my mind ... and then went on to create this tool. I've been dreaming about something like this for a number of years now! The feature that wins me over is where you can pull in updated file attributes (version, language, MsiFileHash entries ..) into the database editor view/gui which is simply great!

Bob, if you read this, maybe it would be an idea to contact this project about your ideas for a simple repackager?

Anyways, try it out, would be interesting to hear other comments on this tool. And no, I'm not in any way associated to the project ..

0 Comments   [ + ] Show comments

Answers (53)

Posted by: AngelD 15 years ago
Red Belt
0
Thanks for the tip!

Seems nice, havn't tried it much yet.
Takes a long time during "building relationships for tables" for a "larger" package. Tested on an MSI with 8600 File, 7000 Registry, 8300 MsiFileHash table entries which isn't that large. Without ticking the "Enable Row Reference Tracking" option its fast.
Posted by: bkelly 15 years ago
Red Belt
0
Looks promising; thanks for pointing it out!
Posted by: MSIPackager 15 years ago
3rd Degree Black Belt
0
Weird - looks virtually identical to Camwoods appEditor: http://www.camwood.com/software/products/apped.shtml

Still won't be leaving Orca tho :-)
Posted by: jib 15 years ago
Purple Belt
0
Hmm yes, strange. So I googled "insted camwood" and found that the very last line of www.instedit.com contains:

A previous version of InstEd, called appEditor, is available from Camwood Ltd.

Ok :-) explains it. For a sec there I wanted it to be more mysterious than that.
Posted by: Ram 15 years ago
Senior Purple Belt
0
Hello folks,

I tried installing it but won't install in XP.

Here is the error message.

"The installation package cannot be installed by the windows installer service. You must install a Windows service pack that contains a newer version of the Windows Installer service."

Ram.
Posted by: neo2000 15 years ago
Purple Belt
0
Looks nice..!

I probably don't have time available anytime soon to have a look at it.. Unfortunately. So maybe if one of you have the time to check it out:

* does this NOT mess up a vendor msi, like Wise sometimes does when compiling, even when compiling an MST?
* Does the GUI make it easier to add registry keys etc..?

If so, this could be a good tool to have if a vendor MSI has problems with Wise or something, and a whole lot easier to work with. (automatic table population etc..)
TIA
Posted by: anonymous_9363 15 years ago
Red Belt
0
ORIGINAL: Ram
"The installation package cannot be installed by the windows installer service. You must install a Windows service pack that contains a newer version of the Windows Installer service."
Hmmm...I wonder if it's because you need a newer version of the Windows Installer? Tricky one...
Posted by: AngelD 15 years ago
Red Belt
0
Second with you Ian, however how often do you downgrade windows installer on XP to lower then 2.0?
The Schema (Words Summary Information Property) for "InstEd-1.5.1.2.msi" is set to 200 ;)
Posted by: anonymous_9363 15 years ago
Red Belt
0
I completely agree with you, Kim, but look at the question.

Imagine yourself as a new packager, then ask yourself, "What's the first thing I would do?" and, if the answer isn't "Make sure I've got the latest version of Windows Installer", wouldn't your next move be to look for a different job?
Posted by: AngelD 15 years ago
Red Belt
0
hehe well that was a long time ago I asked that question if ever.
Think I need to ask me, myself or the other guy [;)]

But yes your correct the message should indicate to check the MSI engine version.
Posted by: jboyes 15 years ago
Senior Yellow Belt
0
I've just checked this out and have to say it's pretty cool! I especiallly like that you can import reg files directly. Also you can natively create GUIDs for a new component - no need for guidgen or the like...

Jezza
Posted by: AngelD 15 years ago
Red Belt
0
Jezza,

Also you can natively create GUIDs for a new component - no need for guidgen or the like...
FYI This is possible in ORCA too.

The "big" advantage seems to be the .reg import in comparision to ORCA.
To be able to jump through table references is also a cool feature but that I already got in my own developed (in-progress) tool so nothing new there.

Could be nice if everyone posted what they think about the tool and what you guys seems to be the "strong" side of it when compared to ORCA.
Posted by: instedit 15 years ago
Orange Belt
0
Hi all,

I am the author of InstEd and noticed a sudden spike of hits to the site, and discovered this post.
Thanks jib for the recommendation.

InstEd (as you all guessed) is a continuation of development of Camwood's appEditor, the code for which was licensed from me. They are no longer developing appEditor.

My goal really was to make a better Orca. Unfortunately I don't have the resources to make a better Wise or InstallShield just yet. But people using InstEd have told me that they now only go to the big tools when InstEd doesn't do what they need, because it's just faster to work in InstEd. I always have more features planned, but the focus will always be on making it easier and faster to do your job day to day, rather than creating bloatware.

neo2000 - So far, InstEd has been able to open quite a few packages that other tools don't. It won't mess up the package "like Wise sometimes does when compiling" because InstEd doesn't "compile". Most changes to the database are through direct editing (you are responsible for messing it up), or propogation of changes (e.g. deleting child rows) which are all fully selectable. I would be interested on your thoughts on "making it easier to add registry keys".

AngelD - I have managed to speed up the relationship building significantly (e.g. 22 minutes down to 5 minutes on a huge package (11000 reg, 39000 files). see http://blog.instedit.com/2008/05/openmp-utility-code.html for details). This will be in the next version. Also, you can set a threshold such that small packages are automatically relationship enabled, and large ones aren't, unless you click the check box. This lets you have Orca like functionality without having to wait for large packages to be analysed. (Note that for most packages, the relationship enabling is very fast, in the order of seconds rather than minutes, in my experience). Unfortunately the combination of many registry, component and file keys slows the relationships, because the file keys must be analysed with regular expressions for references to files, components and properties in the formatted fields. But as I said, this will be much much faster in future versions.

jib - Glad you like the "update file details" feature. I added that feature when I actually had to make the InstEd msi and found it a pain to do it manually (so it was a bit self-serving). Funnily enough I have already written a simple Snapshot tool that dumps a rough msi. Unfortunately my employer (you guessed it, Camwood) owns the code (although some of it was a donation from me). But I would be keen to hear if other people would support an open source effort on this.

Other users have mentioned the ease of navigation (using the relationships window) as a big benefit of InstEd. The highest prioriteis in my mind are:
"System view" showing what changes are made to a target system for a given feature (a friend had his msi rejected from QA because WISE's system view (whatever it is called) didn't handle the directory entries from merge modules correctly, not because the package was wrong)
and File/Cab management.

But I would be keen to hear from you all "What would make your job easier day to day."
Posted by: dm1 15 years ago
Blue Belt
0
I've been using appeditor for ages, and I find it a brilliant tool, primarily because of the relational nature between the tables, especially handy if you're removing tables and it tells you about it's relations.

Importing simple registry files has been excellent but I've found on more than one occasion that it doesn't handle large .reg files very well.

All in all an excellent tool, and one I use regularly.
Posted by: AngelD 15 years ago
Red Belt
0
Hi Neil,

Thanks for jumping in.
Regarding speeding up the relationship building as I don't know how you enumerate through this maybe it could be done in another way to speed it up abit more. Could you walk through how this is done (no code required) for a discussion on how to improve it?

I'm abit interested of which MSI API you used for the directory paths, did you use the MsiGetSourcePath/MsiGetTargetPath (MsiGetSourcePathW/MsiGetTargetPathW) functions?

/Kim
Posted by: jib 15 years ago
Purple Belt
0
ORIGINAL: instedit
I am the author of InstEd and noticed a sudden spike of hits to the site, and discovered this post.
Thanks jib for the recommendation.

No problem, welcome to Appdeploy!

ORIGINAL: instedit
Funnily enough I have already written a simple Snapshot tool that dumps a rough msi. Unfortunately my employer (you guessed it, Camwood) owns the code (although some of it was a donation from me). But I would be keen to hear if other people would support an open source effort on this.

I'm sure you'll find people willing to support it. I've been playing with your hooks to external tools etc. and see the possibilites there. If you open source a snapshot "plugin" you have my support.
Posted by: instedit 15 years ago
Orange Belt
0
Hi AngelD,

To answer the Directory API question, I rolled my own. I entirely use the Directory table entries to determine the target and source paths.

As for the relationships, it gets complicated, but I will start with the simple stuff. There is a schema.dat file in the InstEd folder. This defines all the relationships (you can get in and edit it for your own ends. It's just a msi database in disguise).

InstEd then basically walks each table, looking for the defined relationships for that table. Then, it walks each row in left table, looping each row in the right table, comparing the relevant fields for each defined relationship. It gets quite a bit more complicated (relationships can have more than one part, e.g. Dialog to Control), but that's the basics.

As a separate job, formatted fields are analysed for relationships to properties (directory and property table), components and files.

Each formatted field has a regex run over it that looks for [...], [$...], [#...] etc.

If a match is found, the relevant table's keys are searched for the matched string.

I am not sure whether the algorithms can be improved. But some of the underlying assumptions could be re-assessed, such as "All relationships must be analysed before editing", or allowing subsets of relationships to be ignored (this can be done globally by editing the schema.dat).
Posted by: timmsie 15 years ago
Fourth Degree Brown Belt
0
I've also been using appeditor for a while. The relationships between tables is really handy.

Downloaded your version and will definately be using it.

I've also downloaded Orca v4 and it's got the Vista validation cub in there, any plans to add it to Insted?
Posted by: AngelD 15 years ago
Red Belt
0
timmsie,

Test hitting the "Browse for Cub" button in the Validation Profile dialog and select the cub of choice?
Posted by: AngelD 15 years ago
Red Belt
0
Neil,

To answer the Directory API question, I rolled my own. I entirely use the Directory table entries to determine the target and source paths.
Started to do that in my analyzer (C#) tool but seemed to get a "buffer overrun" during my recursive function [;)]

So yesterday I tried the MsiGetSourcePath function but had some problems with it due to missing marshal wrapper for the MsiDoAction function needed to call the CostInitialize, FileCost and CostFinalize actions prior to the MsiGetSourcePath function. See if I'll have the time to look at it a bit more today.
Posted by: instedit 15 years ago
Orange Belt
0
The good news is that while I as writing my last post, and after some subsequent stewing on the matter, there is a significant gain to be made in the relationship building with judicious use of maps.

Good luck with the Directory thing. I found that building a map of directory table keys to paths was easier than getting the api functions to work (and will work independentlty of the environment). You are right in that recursing up the tree is the best way to do it, but you need to make sure that you get the roots correct to terminate the recursion.
Posted by: instedit 15 years ago
Orange Belt
0
Hi timmsie,

Wasn't actually aware there was a Vista cub. I will certainly be adding it to the next release.
But AngelD is right,you can browse to it, and then save it into your preferred validation profile.
Posted by: AngelD 15 years ago
Red Belt
0
ORIGINAL: instedit

You are right in that recursing up the tree is the best way to do it, but you need to make sure that you get the roots correct to terminate the recursion.

Yeah, that is exactly what I did; end the recursive call when the "root" entry was found. Must be something else, damn developer [;)]

there is a significant gain to be made in the relationship building with judicious use of maps.
Great!
Posted by: jboyes 15 years ago
Senior Yellow Belt
0
ORIGINAL: AngelD

Jezza,

Also you can natively create GUIDs for a new component - no need for guidgen or the like...
FYI This is possible in ORCA too.



Thanks for that AngelD

I've just discovered "Paste New GUID" inside Orca, which I hadn't noticed before!

Cheers
Jezza
Posted by: AngelD 15 years ago
Red Belt
0
That's the life of a packager, you learn something new every time.

Cheers!
Posted by: instedit 15 years ago
Orange Belt
0
Kim, you'll be pleased to know that the "significant gains when building relationships with
judicious use of maps" were, well, quite significant.

My large test msi (which takes 22 minutes in the last released version) dropped from
5:45 minutes (with recent improvements) to - wait for it - 5 seconds.

Woohoo!

Neil
Posted by: anonymous_9363 15 years ago
Red Belt
0
Now THAT'S what I call code optimisation! :) Good job, Neil. Let's have it, then!

EDIT: Any chance you could offer your services to Altiris, so they can finally make their merge module enumeration work in anything approaching a reasonable time frame?
Posted by: AngelD 15 years ago
Red Belt
0
Great work Neil!

Hope to see the new version on your site for us to have a look.

/Kim
Posted by: AngelD 15 years ago
Red Belt
0
I was going to create a transform for ISScript1050.Msi to remove the RunAs registry entry to remove the "Interactive User" issue.
Doing this using ORCA 4.0.6001.0 and ORCA crashes.

Used InstEd instead which worked without any problem.
Removed entries:
Registry601 0 AppId\{223D861E-5C27-4344-A263-0C046C2BE233} RunAs Interactive User iDriver.exe_Interactive_Key
Registry6010 0 AppId\{223D861E-5C27-4344-A263-0C046C2BE233} RunAs iDriver.exe_Interactive_Key_NT4

Something isn't what it should with this version of ORCA as when I open the MSI and the newly created transform and select the Registry table ORCA crash once more.

Thanks Neil!

We're still waiting for the new version [;)]

Cheers!
Posted by: instedit 15 years ago
Orange Belt
0
Hi Kim,

I posted about that Orca bug here: http://blog.instedit.com/2008/05/orca-eats-bugs.html

I subsequently found a Microsoft page listing this bug (and the subsequent fix in the Server 2008 SDK)
http://blogs.msdn.com/windows_installer_team/archive/2008/04/29/what-changed-in-windows-installer-msi-in-windows-vista-service-pack-1.aspx

So the latest version of Orca has the bug fixed, but as you discovered, it's always worth trying this: InstEd. (Shameless, I know.)

Neil
Posted by: nheim 15 years ago
10th Degree Black Belt
0
Hi folks,
@Neil: thanks for this hint on the new ORCA version. Version 4 was virtually unusable so far. The new one looks promising.

To dig it out of the SDK without installing the hole thing, one can mount the ISO and change to the "Setup" directory.
In there, look for "WinSDKTools-WinSDKTools-common.0.cab", it contains all the Installer related utilities, we're intrested in.
Browse it with explorer and look for "Orca_Msi.CC9C93FA_6D40_4F99_AE73_BFFD860996D7".
Drag it out of the CAB to a folder and rename it "ORCA.MSI". That's it.
If we want to install the hole Installer SDK, we need "WinSDKTools-x86.msi" and "WinSDKTools-WinSDKTools-x86.0.cab" too,
from the same folder.
Regards, Nick
Posted by: AngelD 15 years ago
Red Belt
0
wee, another 1330.0 MB to download just for ORCA [:D]
Posted by: AngelD 15 years ago
Red Belt
0
Neil,

Instead of displaying "<null>" as the column value could you just leave that empty instead?
Could you move trasformed tables/entries (changed/removed/added) to the top for easy visibility of transform changes?

/Kim
Posted by: anonymous_9363 15 years ago
Red Belt
0
ORIGINAL: AngelD
Instead of displaying "<null>" as the column value could you just leave that empty instead?
Neil will (hopefully) resist that temptation because Null is not the same as zero, empty or blank, an important - if slightly geeky - differentiation.
Posted by: instedit 15 years ago
Orange Belt
0
Hi VBScab,

It turns out that for the case of string fields, null IS the same as an empty string.

You can't store an empty string value in an msi. It gets converted to null.

However empty binary fields are different to null binary fields.
And integer fields use a unique value (unfortunately) for null.
See here for more details on that sad story
http://blog.instedit.com/2008/03/danger-of-special-values.html

I can add an option for the null display string. Then users can make it
whatever they want.

Neil
Posted by: instedit 15 years ago
Orange Belt
0
> Could you move trasformed tables/entries (changed/removed/added) to the top for easy visibility of transform changes?

I have been thinking about the best way to allow easy viewing of the changed fields.

I was going to add Next/Previous Change commands, but your suggestion is neat.

Neil
Posted by: AngelD 15 years ago
Red Belt
0
I can add an option for the null display string. Then users can make it whatever they want.
Thanks Neil

How about the transform part?

/Kim
Posted by: instedit 15 years ago
Orange Belt
0
OK, the option for the null display string has been added (change it in the registry, and only while no InstEd instances are running) for Release 1.5.2.3.

HKEY_CURRENT_USER\Software\instedit.com\insted\Options -> NULL_DISPLAY_STRING

I must say, I am not a fan of a blank entry. Mainly because with no grid (that's another debate) it looks a bit empty. But the option is there now.

Neil
Posted by: AngelD 15 years ago
Red Belt
0
Great, so that means I got a personal option only for me :D

Any timeframe for the release?
Posted by: instedit 15 years ago
Orange Belt
0
New version soon.

If anyone wants a release candidate, email me at the address located here:
http://www.instedit.com/contactus

Neil
Posted by: neo2000 15 years ago
Purple Belt
0
ORIGINAL: instedit
neo2000 - So far, InstEd has been able to open quite a few packages that other tools don't. It won't mess up the package "like Wise sometimes does when compiling" because InstEd doesn't "compile". Most changes to the database are through direct editing (you are responsible for messing it up), or propogation of changes (e.g. deleting child rows) which are all fully selectable. I would be interested on your thoughts on "making it easier to add registry keys".

When it doesn't compile, does it update related tables etc. when adding for instance a registry key? Without compiling..?

Haven't tried thwe software as of yet, but the user interface looks like it's easier to add registry keys etc.. Does it have an import/export option for regkeys like Wise has..?
Posted by: AngelD 15 years ago
Red Belt
0
Compiling is a definition of generating an MSI fromout ex. a Wise project (WSI).
So compile isn't the same using the Commit method on the database.

Commit Method of the Database Object
http://msdn.microsoft.com/en-us/library/aa368245(VS.85).aspx
Posted by: neo2000 15 years ago
Purple Belt
0
Thanks AngelD! Seems like every time i visit appdeploy, i learn something new from ya..! [:D]
Posted by: AngelD 15 years ago
Red Belt
0
Neil,

Transform bug? and Crash

InstEd 1.5.2.3 (1.5.2.1 not tested)

Bug:
Creating a new transform, make changes; any relation will not be changed while renaming the identifier name, not before or after saving the transform nor does remove transform have any affect. You have to close InstEd and open the MSI & MST again for the relation dialog to popup.

Crash:
Crash during transform change and double-click on relation entry.
ex.
Add entry in CustomAction table
Refer to the CA in InstallExecuteSequence
Save transform
Open the MSI and MST
Change an identifier entry & hit enter and the relation dialog popups.
Double-click a relation and the main window will jump to the related table entry.
Click OK for the rename to take place and a crash occur.

By the way; I like the relation tracking speed improvement in the 1.5.2.3 RC,; from minutes to seconds.

/Kim
Posted by: AngelD 15 years ago
Red Belt
0
You're welcome!
Posted by: instedit 15 years ago
Orange Belt
0
Thanks for the report AngelD.

> Bug: New Transform doesn't update relationships
When transforms files are initially loaded, the relationships aren't built by default. (Can't remember the reason off the top of my head)
You don't have to restart InstEd. Just click Enable Row Reference Tracking.

> Crash: Navigating using the Update Referencing Rows dialog.
Confirmed bug in 1.5.1.2. The editing code expects the table that triggered the edit to be active when the dialog is complete.
Will be fixed for release 1.5.2.3 - coming soon!

Neil
Posted by: Tone 15 years ago
Second Degree Blue Belt
0
Nice work, thanks!
Posted by: kkaminsk 15 years ago
9th Degree Black Belt
0
Played with it and I give it a thumbs up!
Posted by: instedit 15 years ago
Orange Belt
0
Hi all,

I am happy to announce that InstEd 1.5.2.3 has been released.

It now includes forward/back navigation, huge performance improvements,
and a few bug fixes.

Release notes here.
Download here.

All the best,
Neil

P.S. If this is not the right place to post this announcement, forgive me. However I
thought it was relevant given that some bugs and suggestions were posted in
this thread.
Posted by: Inabus 15 years ago
Second Degree Green Belt
0
Just a question really, in Orca I am able to add any tables not in the package, so for example the RemoveFile table, however I am unable to do that with InstEd without importing the table I have exported from another package, unlike Orca where you can add any table you want.

An example is the InstEd MSI which has an ICE64 but I am unable to fix it as you dont have a RemoveFile table in the package so I would have to export it / add it via Orca, which seems a shame :)

Oh incidently the table is in the "_Tables" table!

Regards,
P
Posted by: instedit 15 years ago
Orange Belt
0
Hi Inabus,

You probably just need to check the Show Empty Tables checkbox below the tables list.

Also, the Tables->Add Table menu option allows you to add the standard tables if
they are missing.

If the Add Table dialog doesn't list your table, you can either import it using an idt,
or add it to the schema msi files in the InstEd folder, so that it shows in the Add
Table dialog.

Neil
Posted by: AngelD 15 years ago
Red Belt
0
ORIGINAL: instedit
P.S. If this is not the right place to post this announcement, forgive me. However I
thought it was relevant given that some bugs and suggestions were posted in
this thread.

Good thinking.

However would be good if you could provide the release under Product Announcements forum.

/Kim
Posted by: Inabus 15 years ago
Second Degree Green Belt
0
Neil,
Thanks for the reply that was what I was looking for, i like seeing empty tables makes me feel important ;)

P
Rating comments in this legacy AppDeploy message board thread won't reorder them,
so that the conversation will remain readable.
 
This website uses cookies. By continuing to use this site and/or clicking the "Accept" button you are providing consent Quest Software and its affiliates do NOT sell the Personal Data you provide to us either when you register on our websites or when you do business with us. For more information about our Privacy Policy and our data protection efforts, please visit GDPR-HQ