Hi,

I am using C# in VS2008 to access an MSI and delete some rows. I am
using the latest weekly WIX build, 3.5.0626. When I try to use the
View.Delete method I receive the InstallerException "Cursor in invalid
state". I've simplified the code and replicated the error with the
sample below:

        string strMsiPath = @"C:\Test.msi";
        using (Database objDatabase = new Database(strMsiPath,
DatabaseOpenMode.Transact))
        {
                using (View vwTable = objDatabase.OpenView("SELECT *
FROM Class"))
                {
                    vwTable.Execute();
                    Record rcdTable = vwTable.Fetch();
                    while (rcdTable != null)
                    {
                        vwTable.Delete(rcdTable);
                        rcdTable = vwTable.Fetch();
                    }
                }
        }
        System.Windows.Forms.MessageBox.Show("Done");

I am pretty sure that I am following all of the pointers in the
documentation ("The Record must have been obtained by calling Fetch().
Fails if the row has been deleted. Works only with read-write records.
This method cannot be used with a View containing joins."). There is
also a reference to See Modify(ViewModifyMode, Record) for more remarks.
I've tried replacing vwTable.Delete(rcdTable) with
vwTable.Modify(ViewModifyMode.Delete, rcdTable) and get the same error,
though that's to be expected as View.Delete(Record) just falls through
to View.Modify(Delete,Record).

The equivalent code in VBS works fine:

        Const msiOpenDatabaseModeTransact = 1
        Const msiViewModifyDelete = 6
        Set objWI = Wscript.CreateObject("WindowsInstaller.Installer")
        Set objDB = objWI.OpenDatabase("C:\Test.msi",
msiOpenDatabaseModeTransact)
        Set objView = objDB.OpenView("SELECT * FROM Class")
        objView.Execute
        Set objRecord = objView.Fetch
        While Not objRecord Is Nothing
                objView.Modify msiViewModifyDelete, objRecord
                Set objRecord = objView.Fetch
        Wend
        objView.Close
        Set objWI = Nothing
        MsgBox "Done"

Any clue as to what I am doing wrong?

Many thanks,
James
This e-mail is confidential and the information contained in it may be
privileged. It should not be read, copied or used by anyone other than the
intended recipient.  If you have received it in error, please contact the sender
immediately by telephoning (+44 (0)20 7623 8000) or by return email, and delete 
the e-mail and do not disclose its contents to any person.  We believe, but do
not warrant, that this e-mail and any attachments are virus free, but you must
take full responsibility for virus checking. Please refer to 
http://www.dresdnerkleinwort.com/disc/email/ and read our e-mail disclaimer 
statement and monitoring policy.

Dresdner Kleinwort is a brand and trading name of the Commerzbank group and 
operates through Commerzbank AG, Dresdner Kleinwort Limited and their affiliated
or associated companies.  Commerzbank AG is a company incorporated in Germany
with limited liability and registered in England (registered no. FC008139, place
of business 60 Gracechurch Street, London EC3V 0HR) and is authorised by 
Bundesanstalt fuer Finanzdienstleistungsaufsicht (BaFin) and authorised and 
subject to limited regulation by the Financial Services Authority (FSA).
Dresdner Kleinwort Limited is a company incorporated in England with limited 
liability (registered no. 551334, registered office 30 Gresham Street, London 
EC2V 7PG) and is authorised and regulated by the FSA.  Details about the extent
of our authorisations and regulation are available on request. 


------------------------------------------------------------------------------
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to