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

Comments

Please log in to comment

Rating comments in this legacy AppDeploy message board thread won't reorder them,
so that the conversation will remain readable.

Answers

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.
Answered 05/17/2008 by: AngelD
Red Belt

Please log in to comment
0
Looks promising; thanks for pointing it out!
Answered 05/17/2008 by: bkelly
Red Belt

Please log in to comment
0
Weird - looks virtually identical to Camwoods appEditor: http://www.camwood.com/software/products/apped.shtml

Still won't be leaving Orca tho :-)
Answered 05/17/2008 by: MSIPackager
Third Degree Black Belt

Please log in to comment
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.
Answered 05/18/2008 by: jib
Purple Belt

Please log in to comment
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.
Answered 05/19/2008 by: Ram
Senior Purple Belt

Please log in to comment
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
Answered 05/19/2008 by: neo2000
Purple Belt

Please log in to comment
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...
Answered 05/19/2008 by: VBScab
Red Belt

Please log in to comment
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 ;)
Answered 05/19/2008 by: AngelD
Red Belt

Please log in to comment
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?
Answered 05/19/2008 by: VBScab
Red Belt

Please log in to comment
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.
Answered 05/19/2008 by: AngelD
Red Belt

Please log in to comment
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
Answered 05/19/2008 by: jboyes
Senior Yellow Belt

Please log in to comment
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.
Answered 05/19/2008 by: AngelD
Red Belt

Please log in to comment
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."
Answered 05/19/2008 by: instedit
Orange Belt

Please log in to comment
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.
Answered 05/19/2008 by: dm1
Blue Belt

Please log in to comment
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
Answered 05/19/2008 by: AngelD
Red Belt

Please log in to comment
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.
Answered 05/20/2008 by: jib
Purple Belt

Please log in to comment
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).
Answered 05/20/2008 by: instedit
Orange Belt

Please log in to comment
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?
Answered 05/20/2008 by: timmsie
Fourth Degree Brown Belt

Please log in to comment
0
timmsie,

Test hitting the "Browse for Cub" button in the Validation Profile dialog and select the cub of choice?
Answered 05/20/2008 by: AngelD
Red Belt

Please log in to comment
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.
Answered 05/20/2008 by: AngelD
Red Belt

Please log in to comment
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.
Answered 05/20/2008 by: instedit
Orange Belt

Please log in to comment
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.
Answered 05/20/2008 by: instedit
Orange Belt

Please log in to comment
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!
Answered 05/20/2008 by: AngelD
Red Belt

Please log in to comment
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
Answered 05/20/2008 by: jboyes
Senior Yellow Belt

Please log in to comment
0
That's the life of a packager, you learn something new every time.

Cheers!
Answered 05/20/2008 by: AngelD
Red Belt

Please log in to comment
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
Answered 05/20/2008 by: instedit
Orange Belt

Please log in to comment
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?
Answered 05/21/2008 by: VBScab
Red Belt

Please log in to comment
0
Great work Neil!

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

/Kim
Answered 05/21/2008 by: AngelD
Red Belt

Please log in to comment
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!
Answered 05/22/2008 by: AngelD
Red Belt

Please log in to comment
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
Answered 05/22/2008 by: instedit
Orange Belt

Please log in to comment
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
Answered 05/23/2008 by: nheim
Tenth Degree Black Belt

Please log in to comment
0
wee, another 1330.0 MB to download just for ORCA [:D]
Answered 05/23/2008 by: AngelD
Red Belt

Please log in to comment
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
Answered 05/26/2008 by: AngelD
Red Belt

Please log in to comment
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.
Answered 05/27/2008 by: VBScab
Red Belt

Please log in to comment
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
Answered 05/27/2008 by: instedit
Orange Belt

Please log in to comment
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
Answered 05/27/2008 by: instedit
Orange Belt

Please log in to comment
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
Answered 05/27/2008 by: AngelD
Red Belt

Please log in to comment
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
Answered 05/27/2008 by: instedit
Orange Belt

Please log in to comment
0
Great, so that means I got a personal option only for me :D

Any timeframe for the release?
Answered 05/27/2008 by: AngelD
Red Belt

Please log in to comment
0
New version soon.

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

Neil
Answered 05/27/2008 by: instedit
Orange Belt

Please log in to comment
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..?
Answered 05/27/2008 by: neo2000
Purple Belt

Please log in to comment
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
Answered 05/27/2008 by: AngelD
Red Belt

Please log in to comment
0
Thanks AngelD! Seems like every time i visit appdeploy, i learn something new from ya..! [:D]
Answered 05/27/2008 by: neo2000
Purple Belt

Please log in to comment
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
Answered 05/29/2008 by: AngelD
Red Belt

Please log in to comment
0
You're welcome!
Answered 05/29/2008 by: AngelD
Red Belt

Please log in to comment
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
Answered 05/29/2008 by: instedit
Orange Belt

Please log in to comment
0
Nice work, thanks!
Answered 05/31/2008 by: Tone
Second Degree Blue Belt

Please log in to comment
0
Played with it and I give it a thumbs up!
Answered 06/02/2008 by: kkaminsk
Ninth Degree Black Belt

Please log in to comment
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.
Answered 06/05/2008 by: instedit
Orange Belt

Please log in to comment
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
Answered 06/06/2008 by: Inabus
Second Degree Green Belt

Please log in to comment
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
Answered 06/06/2008 by: instedit
Orange Belt

Please log in to comment
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
Answered 06/06/2008 by: AngelD
Red Belt

Please log in to comment
0
Neil,
Thanks for the reply that was what I was looking for, i like seeing empty tables makes me feel important ;)

P
Answered 06/09/2008 by: Inabus
Second Degree Green Belt

Please log in to comment
Answer this question or Comment on this question for clarity