VS2005 Setup Project File with Property 'Permanent' is uninstalled

F

flutophilus

Hi,

I'm working with VS2005 and I have a setup project that installs a Windows
forms application. I have a config file ( it's the app.config file -
MyApp.exe.config) which I want to leave on the target system if the
application is uninstalled. In the Setup Project File System designer I set
the "permanent" property of this file to "True", which should leave the file
installed if the user uninstalls the application. However if I uninstall the
application using the setup.exe generated by the setup project it removes
this file.

Am I doing something wrong?
 
S

Steven Cheng

Hi flutophilus,

From your description, I understand you've built a setup project which set
a certain file to "permanent = true" so as to prevent it from being removed
at uninstall time, however, you found the file still got removed, correct?

I agree that the "permanent=true" should keep the file from being removed
as you expected. I've also performed some simple tests by creating some
setup project and set some files(deploy to program files or desktop folder)
to "permanent =true", and they're preserved as expected after I uninstall
the program. Therefore, I think this should be a specific case. Have you
tried a simple setup (or try mark other files to permanent) to see whether
you can get the expected behavior. Also, is there other custom code module
in setup project that may touch the file?

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


This posting is provided "AS IS" with no warranties, and confers no rights.


--------------------
 
F

flutophilus

Hi Steven,

I created a test project as you suggested and it worked fine. I did wonder
if the problem was becuase the file I was marking permanent was the config
file (MyApp.exe.config) which is, I realised already included as part of the
primary output from the main project. But it worked OK on this file, which is
great.

So I went back to my original project and removed and re-added the primary
output and the config file separately, marked the coinfig file as permanent
and to my great pleasure it worked !!! So I have no idea why it failed to
wrok before.

Now when I uninstal it leaves the config file behind.

Interestingly if I re-instal into the same location it does not overwrite
the config file. This is great but is it the expected behaviour ? Can I rely
on it?

Cheers
 
S

Steven Cheng

Thanks for your reply,

Yes, actually in my test, I explicitly include all the files(of the certain
project into my setup project) so that I can set the "permanent" property
for the config file. I think you can rely on it (since the "permanent"
property is expected to behave like this). However, I suggest you
explicitly include the config file into your setup project and set its
permanent property.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we

can improve the support we provide to you. Please feel free to let my
manager know what you think of

the level of service provided. You can send feedback directly to my manager
at: (e-mail address removed).

This posting is provided "AS IS" with no warranties, and confers no rights.


--------------------
From: =?Utf-8?B?Zmx1dG9waGlsdXM=?= <[email protected]>
References: <[email protected]>
 
F

flutophilus

For completenes, another way to save a config file is to use a custom
installer class, here's my effort, fwiw.

' Custom action to run in setup at instal time. Create install log and
copy the saved config file to live
' (prevents overwrite of user settings by test settings after first
install).
' To run this automatically just put the primary output for this project
under the "custom action - install" tag
' in the setup project
Public Overrides Sub Install(ByVal stateSaver As
System.Collections.IDictionary)

' Uses reflection to find the location of the config file.
Dim Asm As System.Reflection.Assembly = _
System.Reflection.Assembly.GetExecutingAssembly
' Asm.Location is location and name of .exe in the installation folder
Dim strExeLoc As String = Asm.Location

' the name of the install-to folder
Dim strInstallFolder As String
strInstallFolder = strExeLoc
' strip out name of executable
strInstallFolder =
strInstallFolder.Remove(strInstallFolder.LastIndexOf("\"),
Len(strInstallFolder) - _
strInstallFolder.LastIndexOf("\"))

Dim installlog As New System.IO.StreamWriter(strInstallFolder &
"\Installation.log")
installlog.AutoFlush = True

Try

installlog.WriteLine("Starting installation of the config file")
installlog.WriteLine("Install folder: " & strInstallFolder)

Dim strSavedConfigLoc As String = _
strExeLoc & ".config.saved" ' derive the name of the saved
config

installlog.WriteLine("Location of the saved config file: " &
strSavedConfigLoc)

Dim FileInfo As System.IO.FileInfo = New
System.IO.FileInfo(strSavedConfigLoc)

If Not FileInfo.Exists Then
installlog.WriteLine("No saved config file: " &
strSavedConfigLoc)
installlog.WriteLine("Config will be installed using test
settings from setup ")
Else
Dim strLiveConfigLoc As String = _
strExeLoc & ".config" ' derive the name of the saved
config
System.IO.File.Delete(strLiveConfigLoc)
System.IO.File.Copy(strSavedConfigLoc, strLiveConfigLoc)
installlog.WriteLine("Config file copied from: " &
strSavedConfigLoc & " to: " & strLiveConfigLoc)

End If

Finally
installlog.WriteLine("Ending installation")
installlog.Close()
End Try

End Sub

'Custom action to run in setup - log the uninstall and save the config
file
' To run this automatically just put the primary output for this project
under the "custom action - install" tag
' in the setup project
Public Overrides Sub UnInstall(ByVal stateSaver As
System.Collections.IDictionary)

' Uses reflection to find the location of the config file.
Dim Asm As System.Reflection.Assembly = _
System.Reflection.Assembly.GetExecutingAssembly
' Asm.Location is location and name of .exe in the installation folder
Dim strExeLoc As String = Asm.Location

' the name of the install-to folder
Dim strInstallFolder As String
strInstallFolder = strExeLoc
' strip out name of executable
strInstallFolder =
strInstallFolder.Remove(strInstallFolder.LastIndexOf("\"),
Len(strInstallFolder) - _
strInstallFolder.LastIndexOf("\"))

Dim installlog As New System.IO.StreamWriter(strInstallFolder &
"\Installation.log")
installlog.AutoFlush = True

Try

installlog.WriteLine("Starting uninstallation of the config file")
installlog.WriteLine("Install folder: " & strInstallFolder)

Dim strLiveConfigLoc As String = _
strExeLoc & ".config" ' derive the name of the config

installlog.WriteLine("Location of the config file: " &
strLiveConfigLoc)

Dim FileInfo As System.IO.FileInfo = New
System.IO.FileInfo(strLiveConfigLoc)

If Not FileInfo.Exists Then
installlog.WriteLine("No live config file: " &
strLiveConfigLoc)
installlog.WriteLine("Config will not be saved ")
Else
Dim strSavedConfigLoc As String = _
strExeLoc & ".config.saved" ' derive the name of the
saved config
System.IO.File.Delete(strSavedConfigLoc)
System.IO.File.Copy(strLiveConfigLoc, strSavedConfigLoc)
installlog.WriteLine("Config file copied from: " &
strLiveConfigLoc & " to: " & strSavedConfigLoc)

End If

Finally
installlog.WriteLine("Ending uninstallation")
installlog.Close()
End Try

End Sub
 
F

Family Tree Mike

Is it possible the file was installed with a setup where you had marked it as
not being permanent, but then ran your new installer to try and uninstall it?
If this is the case, the permanancy of the file had already been set. This
would explain why your later new build worked.
 
F

flutophilus

It's a good idea, but I don't think that's it, because I did clear everything
down, several times and try again. In other words I uninstalled, the file was
removed, I re-installed using the "permanent" property and uninstalled and
the file was still removed. I tried this several times and rechecked I had
the permanent property set as it was not what I was expecting.

I can only say that I did add and remove various outputs, files, .exe and
dll's to the applications folder while trying to understand how setup
projects work. It was only when I cleared down the setup project and started
again that it worked. Now of course I can't reproduce the problem, but then I
don't want to :)


The trouble is I was trying to get the system to do what I thought it should
do and I wasn't trying to record what I was doing in order to reproduce it,
so I can't be absolutely clear.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top