cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Guillaume_R_
Level 3

Install/Uninstall Service

Hello,
I'm currently evaluating InstallShield 2009 for my company as a replacement for visual studio 2005 setup project.
I'm trying to make a Basi MSI to install a windows service :

[LIST=1]
  • I've created a solution with a dummy windows service project
  • I've added a Basic MSI InstallShield project
  • In the MSI project i'va added the project output to the INSTALLDIR


    With this the files are copied on install and deleted on uninstall.

    [LIST=1]
  • I've added a new component with the wizard to install the service
  • I've added a new component with the wizard to control the service : start service on install, stop and delete on uninstall


    With this the files are copied, the service is install and started on install. On uninstall, the service is stopped and deleted but the exe is not deleted.

    Anyone know what i need to do to delete the exe file on uninstall ?

    Also i tried to reduce the number of component so i copied the install nt services properties to the primary output properties and deleted the install component. This works, the service is installed correctly.
    But when i copy the control nt services properties this doesn't work, the control nt service must be in a separate component.
    Anyone know where i can find best practice for creating service install MSI ? (use separate components for install, primary and control ? i multiple service install use multiple install component ? ...)

    Thanks,
    Guillaume
  • Labels (1)
    0 Kudos
    (5) Replies
    Guillaume_R_
    Level 3

    No one ?

    Thanks,
    Guillaume
    0 Kudos
    mberterm
    Level 7

    Lets begin with the most useful troubleshooting tool, a log...

    "Does an MSI log you create during uninstallation give any more information? Does it happen on every target OS...?"

    And is the file successfully removed following a reboot?
    0 Kudos
    Christopher_Pai
    Level 16

    For clarity, services install/uninstall only when their keyfile install/uninstalls. The same component should have both the keyfile pointing to your EXE and the ServiceInstall/ServiceControl attributes.
    0 Kudos
    Guillaume_R_
    Level 3

    Hello,
    Thanks for your answers. Here is the uninstall log (msiexec /uninstall MySetup.msi /l* UninstallLog.txt) :

    [CODE]=== Logging started: 25/08/2008 10:35:15 ===
    Action start 10:35:15: INSTALL.
    Action start 10:35:15: AppSearch.
    Action ended 10:35:15: AppSearch. Return value 0.
    Action start 10:35:15: FindRelatedProducts.
    Action ended 10:35:15: FindRelatedProducts. Return value 0.
    Action start 10:35:15: ValidateProductID.
    Action ended 10:35:15: ValidateProductID. Return value 1.
    Action start 10:35:15: CostInitialize.
    Action ended 10:35:15: CostInitialize. Return value 1.
    Action start 10:35:15: FileCost.
    Action ended 10:35:15: FileCost. Return value 1.
    Action start 10:35:15: IsolateComponents.
    Action ended 10:35:15: IsolateComponents. Return value 0.
    Action start 10:35:15: setUserProfileNT.
    Action ended 10:35:15: setUserProfileNT. Return value 1.
    Action start 10:35:15: setAllUsersProfile2K.
    Action ended 10:35:15: setAllUsersProfile2K. Return value 1.
    Action start 10:35:15: CostFinalize.
    Action ended 10:35:15: CostFinalize. Return value 1.
    Action start 10:35:15: MigrateFeatureStates.
    Action ended 10:35:15: MigrateFeatureStates. Return value 0.
    Action start 10:35:15: SetARPINSTALLLOCATION.
    Action ended 10:35:15: SetARPINSTALLLOCATION. Return value 1.
    Action start 10:35:15: SetODBCFolders.
    Action ended 10:35:15: SetODBCFolders. Return value 0.
    Action start 10:35:15: InstallValidate.
    Action ended 10:35:15: InstallValidate. Return value 1.
    Action start 10:35:15: RemoveExistingProducts.
    Action ended 10:35:15: RemoveExistingProducts. Return value 0.
    Action start 10:35:15: InstallInitialize.
    Action ended 10:35:16: InstallInitialize. Return value 1.
    Action start 10:35:16: ProcessComponents.
    Action ended 10:35:16: ProcessComponents. Return value 1.
    Action start 10:35:16: UnpublishComponents.
    Action ended 10:35:16: UnpublishComponents. Return value 0.
    Action start 10:35:16: MsiUnpublishAssemblies.
    Action ended 10:35:16: MsiUnpublishAssemblies. Return value 1.
    Action start 10:35:16: UnpublishFeatures.
    Action ended 10:35:16: UnpublishFeatures. Return value 1.
    Action start 10:35:16: StopServices.
    Action ended 10:35:16: StopServices. Return value 1.
    Action start 10:35:16: DeleteServices.
    Action ended 10:35:16: DeleteServices. Return value 1.
    Action start 10:35:16: UnregisterComPlus.
    Action ended 10:35:16: UnregisterComPlus. Return value 0.
    Action start 10:35:16: SelfUnregModules.
    Action ended 10:35:16: SelfUnregModules. Return value 1.
    Action start 10:35:16: UnregisterTypeLibraries.
    Action ended 10:35:16: UnregisterTypeLibraries. Return value 0.
    Action start 10:35:16: RemoveODBC.
    Action ended 10:35:16: RemoveODBC. Return value 1.
    Action start 10:35:16: UnregisterFonts.
    Action ended 10:35:16: UnregisterFonts. Return value 1.
    Action start 10:35:16: RemoveRegistryValues.
    Action ended 10:35:16: RemoveRegistryValues. Return value 1.
    Action start 10:35:16: UnregisterClassInfo.
    Action ended 10:35:16: UnregisterClassInfo. Return value 0.
    Action start 10:35:16: UnregisterExtensionInfo.
    Action ended 10:35:16: UnregisterExtensionInfo. Return value 0.
    Action start 10:35:16: UnregisterProgIdInfo.
    Action ended 10:35:16: UnregisterProgIdInfo. Return value 0.
    Action start 10:35:16: UnregisterMIMEInfo.
    Action ended 10:35:16: UnregisterMIMEInfo. Return value 0.
    Action start 10:35:16: RemoveIniValues.
    Action ended 10:35:16: RemoveIniValues. Return value 1.
    Action start 10:35:16: RemoveShortcuts.
    Action ended 10:35:16: RemoveShortcuts. Return value 0.
    Action start 10:35:16: RemoveEnvironmentStrings.
    Action ended 10:35:16: RemoveEnvironmentStrings. Return value 1.
    Action start 10:35:16: RemoveDuplicateFiles.
    Action ended 10:35:16: RemoveDuplicateFiles. Return value 1.
    Action start 10:35:16: RemoveFiles.
    Action ended 10:35:16: RemoveFiles. Return value 0.
    Action start 10:35:16: RemoveFolders.
    Action ended 10:35:16: RemoveFolders. Return value 1.
    Action start 10:35:16: CreateFolders.
    Action ended 10:35:16: CreateFolders. Return value 1.
    Action start 10:35:16: MoveFiles.
    Action ended 10:35:16: MoveFiles. Return value 1.
    Action start 10:35:16: InstallFiles.
    Action ended 10:35:16: InstallFiles. Return value 1.
    Action start 10:35:16: PatchFiles.
    Action ended 10:35:16: PatchFiles. Return value 1.
    Action start 10:35:16: DuplicateFiles.
    Action ended 10:35:16: DuplicateFiles. Return value 1.
    Action start 10:35:16: BindImage.
    Action ended 10:35:16: BindImage. Return value 1.
    Action start 10:35:16: CreateShortcuts.
    Action ended 10:35:16: CreateShortcuts. Return value 0.
    Action start 10:35:16: RegisterClassInfo.
    Action ended 10:35:16: RegisterClassInfo. Return value 0.
    Action start 10:35:16: RegisterExtensionInfo.
    Action ended 10:35:16: RegisterExtensionInfo. Return value 0.
    Action start 10:35:16: RegisterProgIdInfo.
    Action ended 10:35:16: RegisterProgIdInfo. Return value 0.
    Action start 10:35:16: RegisterMIMEInfo.
    Action ended 10:35:16: RegisterMIMEInfo. Return value 0.
    Action start 10:35:16: WriteRegistryValues.
    Action ended 10:35:16: WriteRegistryValues. Return value 1.
    Action start 10:35:16: WriteIniValues.
    Action ended 10:35:16: WriteIniValues. Return value 1.
    Action start 10:35:16: WriteEnvironmentStrings.
    Action ended 10:35:16: WriteEnvironmentStrings. Return value 1.
    Action start 10:35:16: RegisterFonts.
    Action ended 10:35:16: RegisterFonts. Return value 1.
    Action start 10:35:16: InstallODBC.
    Action ended 10:35:16: InstallODBC. Return value 0.
    Action start 10:35:16: RegisterTypeLibraries.
    Action ended 10:35:16: RegisterTypeLibraries. Return value 0.
    Action start 10:35:16: SelfRegModules.
    Action ended 10:35:16: SelfRegModules. Return value 1.
    Action start 10:35:16: RegisterComPlus.
    Action ended 10:35:16: RegisterComPlus. Return value 0.
    Action start 10:35:16: InstallServices.
    Action ended 10:35:16: InstallServices. Return value 1.
    Action start 10:35:16: StartServices.
    Action ended 10:35:16: StartServices. Return value 1.
    Action start 10:35:16: RegisterUser.
    Action ended 10:35:16: RegisterUser. Return value 0.
    Action start 10:35:16: RegisterProduct.
    Action ended 10:35:16: RegisterProduct. Return value 1.
    Action start 10:35:16: PublishComponents.
    Action ended 10:35:16: PublishComponents. Return value 0.
    Action start 10:35:16: MsiPublishAssemblies.
    Action ended 10:35:16: MsiPublishAssemblies. Return value 1.
    Action start 10:35:16: PublishFeatures.
    Action ended 10:35:16: PublishFeatures. Return value 1.
    Action start 10:35:16: PublishProduct.
    Action ended 10:35:16: PublishProduct. Return value 1.
    Action start 10:35:16: InstallFinalize.
    Action ended 10:35:16: InstallFinalize. Return value 1.
    Action ended 10:35:16: INSTALL. Return value 1.
    Property(S): DiskPrompt = [1]
    Property(S): UpgradeCode = {74A7A23B-9F0C-4002-911C-BFE4F223EE2F}
    Property(S): ProductCode = {9FB64B89-6254-4982-B80E-F4BDFA477C26}
    Property(S): Installed = 2008/08/25 12:17:26
    Property(S): PrimaryVolumeSpaceRemaining = 0
    Property(S): PrimaryVolumeSpaceRequired = 0
    Property(S): PrimaryVolumeSpaceAvailable = 0
    Property(S): OutOfNoRbDiskSpace = 0
    Property(S): OutOfDiskSpace = 0
    Property(S): CostingComplete = 1
    Property(S): ROOTDRIVE = C:\
    Property(S): ACTION = INSTALL
    Property(S): Preselected = 1
    Property(S): UILevel = 3
    Property(S): OriginalDatabase = D:\Users\guillaume.rouchon.WINWISE\Documents\Projects\TestServiceInstall\ServiceSetup\ServiceSetup\Default Configuration\Debug\DiskImages\DISK1\ServiceSetup.msi
    Property(S): DATABASE = C:\Windows\Installer\370412.msi
    Property(S): Privileged = 1
    Property(S): MsiRunningElevated = 1
    Property(S): RedirectedDllSupport = 2
    Property(S): MsiWin32AssemblySupport = 6.0.6001.18000
    Property(S): MsiNetAssemblySupport = 2.0.50727.1434
    Property(S): Date = 25/08/2008
    Property(S): Time = 10:35:16
    Property(S): TTCSupport = 1
    Property(S): ColorBits = 32
    Property(S): TextInternalLeading = 3
    Property(S): TextHeight = 16
    Property(S): BorderSide = 1
    Property(S): VersionNT = 600
    Property(S): TARGETDIR = C:\
    Property(S): ALLUSERSPROFILE = C:\ProgramData\
    Property(S): BorderTop = 1
    Property(S): CaptionHeight = 20
    Property(S): ScreenY = 768
    Property(S): ScreenX = 1024
    Property(S): SystemLanguageID = 1036
    Property(S): CommonFilesFolder = C:\Program Files\Common Files\
    Property(S): ISYourDataBaseDir = C:\My Product Name\Database\
    Property(S): DATABASEDIR = C:\My Product Name\Database\
    Property(S): ComputerName = WW-LAT820-04
    Property(S): UserLanguageID = 1036
    Property(S): UserSID = S-1-5-21-725345543-1993962763-1957994488-1586
    Property(S): LogonUser = Guillaume.ROUCHON
    Property(S): MY_PRODUCT_NAME = C:\My Product Name\
    Property(S): INSTALLDIR = C:\My Product Name\
    Property(S): ISCommonFilesFolder = C:\Program Files\Common Files\InstallShield\
    Property(S): AdminUser = 1
    Property(S): VirtualMemory = 3742
    Property(S): ISUpdateServiceFolder = C:\Program Files\Common Files\InstallShield\UpdateService\
    Property(S): PhysicalMemory = 2046
    Property(S): Intel = 6
    Property(S): ShellAdvtSupport = 1
    Property(S): OLEAdvtSupport = 1
    Property(S): GPTSupport = 1
    Property(S): FontsFolder = C:\Windows\Fonts\
    Property(S): DesktopFolder = C:\Users\Public\Desktop\
    Property(S): StartMenuFolder = C:\ProgramData\Microsoft\Windows\Start Menu\
    Property(S): ProgramMenuFolder = C:\ProgramData\Microsoft\Windows\Start Menu\Programs\
    Property(S): StartupFolder = C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\
    Property(S): AdminToolsFolder = C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\
    Property(S): MyPicturesFolder = D:\Users\guillaume.rouchon.WINWISE\Pictures\
    Property(S): LocalAppDataFolder = C:\Users\guillaume.rouchon.WINWISE\AppData\Local\
    Property(S): USERPROFILE = C:\Users\guillaume.rouchon.WINWISE\
    Property(S): CommonAppDataFolder = C:\ProgramData\
    Property(S): WindowsFolder = C:\Windows\
    Property(S): TemplateFolder = C:\ProgramData\Microsoft\Windows\Templates\
    Property(S): SendToFolder = C:\Users\guillaume.rouchon.WINWISE\AppData\Roaming\Microsoft\Windows\SendTo\
    Property(S): RecentFolder = C:\Users\guillaume.rouchon.WINWISE\AppData\Roaming\Microsoft\Windows\Recent\
    Property(S): PrintHoodFolder = C:\Users\guillaume.rouchon.WINWISE\AppData\Roaming\Microsoft\Windows\Printer Shortcuts\
    Property(S): PersonalFolder = D:\Users\guillaume.rouchon.WINWISE\Documents\
    Property(S): NetHoodFolder = C:\Users\guillaume.rouchon.WINWISE\AppData\Roaming\Microsoft\Windows\Network Shortcuts\
    Property(S): FavoritesFolder = D:\Users\guillaume.rouchon.WINWISE\Favorites\
    Property(S): AppDataFolder = C:\Users\guillaume.rouchon.WINWISE\AppData\Roaming\
    Property(S): ProgramFilesFolder = C:\Program Files\
    Property(S): TempFolder = C:\Users\GUILLA~1.WIN\AppData\Local\Temp\
    Property(S): RemoteAdminTS = 1
    Property(S): System16Folder = C:\Windows\system\
    Property(S): SystemFolder = C:\Windows\system32\
    Property(S): WindowsVolume = C:\
    Property(S): MsiNTProductType = 1
    Property(S): ServicePackLevelMinor = 0
    Property(S): ISCHECKFORPRODUCTUPDATES = 1
    Property(S): ApplicationUsers = AllUsers
    Property(S): AgreeToLicense = No
    Property(S): _IsMaintenance = Change
    Property(S): RestartManagerOption = CloseRestart
    Property(S): SetupType = Typical
    Property(S): _IsSetupTypeMin = Typical
    Property(S): Display_IsBitmapDlg = 1
    Property(S): ARPPRODUCTICON = ARPPRODUCTICON.exe
    Property(S): DefaultUIFont = Tahoma8
    Property(S): DialogCaption = InstallShield for Windows Installer
    Property(S): DisplayNameCustom = Custom
    Property(S): DisplayNameMinimal = Minimal
    Property(S): DisplayNameTypical = Typical
    Property(S): DWUSINTERVAL = 30
    Property(S): ErrorDialog = SetupError
    Property(S): InstallChoice = AR
    Property(S): INSTALLLEVEL = 100
    Property(S): IS_COMPLUS_PROGRESSTEXT_COST = Costing COM+ application: [1]
    Property(S): IS_COMPLUS_PROGRESSTEXT_INSTALL = Installing COM+ application: [1]
    Property(S): IS_COMPLUS_PROGRESSTEXT_UNINSTALL = Uninstalling COM+ application: [1]
    Property(S): IS_PROGMSG_XML_COSTING = Costing XML files...
    Property(S): IS_PROGMSG_XML_CREATE_FILE = Creating XML file %s...
    Property(S): IS_PROGMSG_XML_FILES = Performing XML file changes...
    Property(S): IS_PROGMSG_XML_REMOVE_FILE = Removing XML file %s...
    Property(S): IS_PROGMSG_XML_ROLLBACK_FILES = Rolling back XML file changes...
    Property(S): IS_PROGMSG_XML_UPDATE_FILE = Updating XML file %s...
    Property(S): IS_SQLSERVER_AUTHENTICATION = 0
    Property(S): IS_SQLSERVER_USERNAME = sa
    Property(S): ISVROOT_PORT_NO = 0
    Property(S): Manufacturer = Winwise
    Property(S): PIDTemplate = 12345<###-%%%%%%%>@@@@@
    Property(S): ProductID = none
    Property(S): ProductLanguage = 1033
    Property(S): ProductName = ServiceSetup
    Property(S): ProductVersion = 1.0.0.0
    Property(S): PROGMSG_IIS_CREATEAPPPOOL = Creating application pool %s
    Property(S): PROGMSG_IIS_CREATEAPPPOOLS = Creating application Pools...
    Property(S): PROGMSG_IIS_CREATEVROOT = Creating IIS virtual directory %s
    Property(S): PROGMSG_IIS_CREATEVROOTS = Creating IIS virtual directories...
    Property(S): PROGMSG_IIS_CREATEWEBSERVICEEXTENSION = Creating web service extension
    Property(S): PROGMSG_IIS_CREATEWEBSERVICEEXTENSIONS = Creating web service extensions...
    Property(S): PROGMSG_IIS_EXTRACT = Extracting information for IIS virtual directories...
    Property(S): PROGMSG_IIS_EXTRACTDONE = Extracted information for IIS virtual directories...
    Property(S): PROGMSG_IIS_EXTRACTDONEz = Extracted information for IIS virtual directories...
    Property(S): PROGMSG_IIS_EXTRACTzDONE = Extracted information for IIS virtual directories...
    Property(S): PROGMSG_IIS_REMOVEAPPPOOL = Removing application pool
    Property(S): PROGMSG_IIS_REMOVEAPPPOOLS = Removing application pools...
    Property(S): PROGMSG_IIS_REMOVESITE = Removing web site at port %d
    Property(S): PROGMSG_IIS_REMOVEVROOT = Removing IIS virtual directory %s
    Property(S): PROGMSG_IIS_REMOVEVROOTS = Removing IIS virtual directories...
    Property(S): PROGMSG_IIS_REMOVEWEBSERVICEEXTENSION = Removing web service extension
    Property(S): PROGMSG_IIS_REMOVEWEBSERVICEEXTENSIONS = Removing web service extensions...
    Property(S): PROGMSG_IIS_ROLLBACKAPPPOOLS = Rolling back application pools...
    Property(S): PROGMSG_IIS_ROLLBACKVROOTS = Rolling back virtual directory and web site changes...
    Property(S): PROGMSG_IIS_ROLLBACKWEBSERVICEEXTENSIONS = Rolling back web service extensions...
    Property(S): ProgressType0 = install
    Property(S): ProgressType1 = Installing
    Property(S): ProgressType2 = installed
    Property(S): ProgressType3 = installs
    Property(S): RebootYesNo = Yes
    Property(S): ReinstallModeText = omus
    Property(S): IS_PREVENT_DOWNGRADE_EXIT = A newer version of this application is already installed on this computer. If you wish to install this version, please uninstall the newer version first. Click OK to exit the wizard.
    Property(S): SecureCustomProperties = ISFOUNDNEWERPRODUCTVERSION;USERNAME;COMPANYNAME;ISX_SERIALNUM;SUPPORTDIR
    Property(S): ALLUSERS = 1
    Property(S): PROGMSG_IIS_REMOVEWEBSITES = Removing IIS websites...
    Property(S): PROGMSG_IIS_CREATEWEBSITE = Creating IIS website %s
    Property(S): PROGMSG_IIS_CREATEWEBSITES = Creating IIS websites...
    Property(S): DWUSLINK = CECC979F9E8BB0F89EAC80B89E7B978F79EBA08FCECCF06FCEBCE71F6EEBB06FCEAB20AFD9AC
    Property(S): ARPURLINFOABOUT = http://www.winwise.fr
    Property(S): SHOWLAUNCHPROGRAM = 0
    Property(S): SETUPEXENAME = setup.exe
    Property(S): MsiLogFileLocation = D:\Users\guillaume.rouchon.WINWISE\Documents\Projects\TestServiceInstall\ServiceSetup\ServiceSetup\Default Configuration\Debug\DiskImages\DISK1\UninstallLog.txt
    Property(S): ARPINSTALLLOCATION = C:\My Product Name\
    Property(S): ServicePackLevel = 1
    Property(S): WindowsBuild = 6001
    Property(S): VersionMsi = 4.00
    Property(S): VersionDatabase = 200
    Property(S): PRODUCTLANGUAGE = 1033
    Property(S): CLIENTPROCESSID = 3400
    Property(S): CLIENTUILEVEL = 2
    Property(S): CURRENTDIRECTORY = D:\Users\guillaume.rouchon.WINWISE\Documents\Projects\TestServiceInstall\ServiceSetup\ServiceSetup\Default Configuration\Debug\DiskImages\DISK1
    Property(S): REMOVE = ALL
    Property(S): USERNAME = guillaume.rouchon
    Property(S): ProductState = 5
    Property(S): PackageCode = {821E5068-259B-45C6-B1BC-D7F651BC17C9}
    MSI (s) (2C:2C) [10:35:16:452]: Product: ServiceSetup -- Removal completed successfully.

    MSI (s) (2C:2C) [10:35:16:452]: Windows Installer removed the product. Product Name: ServiceSetup. Product Version: 1.0.0.0. Product Language: 1033. Removal success or error status: 0.

    === Logging stopped: 25/08/2008 10:35:16 ===[/CODE]

    I don't see any errors and the files aren't deleted after a reboot.

    My service is a .net service written with VS 2008 (Framework .Net 3.5), my setup project has 2 components :

    [LIST=1]
  • A component for primary output of my service project. In the advanced settings of the component i added the data to install the service (Install NT Services).
  • A component for control NT service. This component has data to stop and delete service on uninstall. I tried putting data for service control in the first component but got errors (not enough rights if i remember).


    I can provide my test solution if needed.

    Also a strange thing is that the setup automatically adds in the installation folder the following assemblies System.Core.dll, System.Xml.Linq.dll and System.Data.DataSetExtensions.dll which are .Net 3.5 assemblies and should be copied...
    These files ARE removed when uninstall, only the exe is not removed...

    I'm sure i'm missing something but since my knowledge on MSI is only creating visual studio setup projects i don't know what. If anyone has an explanation it would be great.

    Thanks,
    Guillaume
  • 0 Kudos
    Guillaume_R_
    Level 3

    Hello,
    I think i found my problem, i started playing with the Shared property on my different components and when passing it to NO everything was working, i could even use only one component (primary output) and add to it service install and service control manually (no wizard).
    Since the resulting configuration was what i tested before and since after some successful tests i put back Shared to YES and it still worked, i believe i had a problem with reference count on my exe file which somehow pass to 2 at first...

    I'm now going to test upgrades and i think i'll come back here for my questions 😉

    Thanks,
    Guillaume
    0 Kudos