Neil,
I just had this same issue myself. I wanted to move some settings from
an INI file to the registry and I was reading my values value back using
registry search but it always comes back as '#1' and you can't write
that back as an integer. It took me a while as I couldnt believe that
it couldnt be done as to me that is an obvious feature an MSI should
be able to deal with......
Anyway, to cut a long story short after several hours of exasperated
attempts I stumbled upon something buried in some documentation (I
forget exactly where I read it) that said something like when you write
a value, the MSI can work out what type of value is being written by the
prefix. I didnt take much notice of it at first. However, what I
eventually realized is that it means is you have to write a value with a
default type and let the MSI work out from the values formatting what
type it really is. What you therefore have to do is write it back as a
string and let it work out, from the # at the beginning, it's a
number!!! So far, its proved perfect up to now for me!
Here's my WXS taken from my MSI (with the names changes to protect the
innocent).
At the start of my MSI, I read the registry using this
<Property Id="PROPERTYNAME" Value="#-1">
<RegistrySearch Id="regSearchName" Root="HKLM" Key="<Approppriate
Key>" Name="<ParameterName>" Type="raw" />
</Property>
The Value section sets the default in case the registrySearch fails.
Note the # prefix. Without this, the value is not treated as an
integer.
Later, I do this to write the value back.
<Component Id="<InsertName>" Guid="<Insert GUID>">
<RegistryValue Id="SomeName" Action="write" Root="HKLM"
Key="<Same AppropriateKey as above>"
Name="<same ParamterName as above" Value="[PROPERTYNAME]"
Type="string" />
</Component>
I believe it or not, the write actually writes a DWORD even though you
ask it to write a string!!!
Hope this helps
Chris Lord
Attero Tech, LLC
-----Original Message-----
From: Neil Sleightholm [mailto:[email protected]]
Sent: Sunday, October 28, 2012 4:39 AM
To: General toolset. ([email protected])
Subject: [WiX-users] Setting DWORD registry keys
In my installation I need to set a dword registry to a default value
when the install is first run and remove the key on uninstall but not
change it on an upgrade. I am struggling to find a way to do reliably
and wondered if anyone had any suggestions.
Here is what I have tried:
1. Read the existing value with <RegistrySearch> and rewrite it on
upgrade, this fails because DWORDs come back prefixed with a hash (#)
and <RegistryValue> causes this to be written as a string.
2. Read the existing value with <RegistrySearch> and Condition the
<RegistryValue> so it is only written when the value is not set. The
problem with this is that on upgrade the key is removed.
I can solve this by writing a CA to read the values but I am sure there
must be a standard way of doing this that is eluding me.
Neil
Neil Sleightholm
X2 Systems Limited
[email protected]<mailto:[email protected]>
------------------------------------------------------------------------
------
WINDOWS 8 is here.
Millions of people. Your app in 30 days.
Visit The Windows 8 Center at Sourceforge for all your go to resources.
http://windows8center.sourceforge.net/
join-generation-app-and-make-money-coding-fast/
_______________________________________________
WiX-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users
------------------------------------------------------------------------------
The Windows 8 Center - In partnership with Sourceforge
Your idea - your app - 30 days.
Get started!
http://windows8center.sourceforge.net/
what-html-developers-need-to-know-about-coding-windows-8-metro-style-apps/
_______________________________________________
WiX-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users