Deployment project - conditional custom action

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Matt F

    Deployment project - conditional custom action

    I have a deployment project that I'm setting up. I need to perform a
    different custom action based on whether this is a first time install or an
    update. Does anyone have any idea if it's possible to set the Condition
    property of a custom action to determine if the currently running install is
    upgrading a previous installation and if so how? I'm also open to other
    methods of acheiving this functionality.


  • RobinS

    #2
    Re: Deployment project - conditional custom action

    How are you deploying it? ClickOnce? Or WindowsInstalle r?

    What is the custom action that you need to perform?

    Robin S.
    ----------------
    "Matt F" <mfielderREMOVE CAPS@nospam.nos pamwrote in message
    news:%23psu%23h eiHHA.872@TK2MS FTNGP03.phx.gbl ...
    >I have a deployment project that I'm setting up. I need to perform a
    >different custom action based on whether this is a first time install or
    >an update. Does anyone have any idea if it's possible to set the
    >Condition property of a custom action to determine if the currently
    >running install is upgrading a previous installation and if so how? I'm
    >also open to other methods of acheiving this functionality.
    >

    Comment

    • Linda Liu [MSFT]

      #3
      RE: Deployment project - conditional custom action

      Hi Matt,

      Based on my understanding, you'd like to add a condition based on whether
      the MSI package is installed for the first time or not, on a custom action.
      If I'm off base, please feel free to let me know.

      The Installed property is initialized if the product is already installed
      on the system. If you want to run a custom action only when the product is
      first installed, you can use Not Installed as a condition.

      Hope this helps.
      If you have any question, please feel free to let me know.

      Sincerely,
      Linda Liu
      Microsoft Online Community Support

      =============== =============== =============== =====
      Get notification to my posts through email? Please refer to
      Find official documentation, practical know-how, and expert guidance for builders working and troubleshooting in Microsoft products.

      ications.

      Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
      where an initial response from the community or a Microsoft Support
      Engineer within 1 business day is acceptable. Please note that each follow
      up response may take approximately 2 business days as the support
      professional working with you may need further investigation to reach the
      most efficient resolution. The offering is not appropriate for situations
      that require urgent, real-time or phone-based interactions or complex
      project analysis and dump analysis issues. Issues of this nature are best
      handled working with a dedicated Microsoft Support Engineer by contacting
      Microsoft Customer Support Services (CSS) at
      http://msdn.microsoft.com/subscripti...t/default.aspx.
      =============== =============== =============== =====

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

      Comment

      • Matt F

        #4
        Re: Deployment project - conditional custom action

        I've released using a different method of determing what I need to know but
        I will need to get this resolved for future releases.

        This s a windows installer project.

        In the "commit" custom action, I need to call my application with a
        different command line parameter based on whether it's a new install or an
        upgrade to a previous install. The function of the command line parameter
        will determine whether to upgrade data from a previous installation or set
        up the base sample data for the application. Yes, it's possible for me to
        just check and see if the data is there, but there are firewall issues that
        make that a less than optimal solution.

        "RobinS" <RobinS@NoSpam. yah.nonewrote in message
        news:r8Cdnf4Vkt oTo6jbnZ2dnUVZ_ oqmnZ2d@comcast .com...
        How are you deploying it? ClickOnce? Or WindowsInstalle r?
        >
        What is the custom action that you need to perform?
        >
        Robin S.
        ----------------
        "Matt F" <mfielderREMOVE CAPS@nospam.nos pamwrote in message
        news:%23psu%23h eiHHA.872@TK2MS FTNGP03.phx.gbl ...
        >>I have a deployment project that I'm setting up. I need to perform a
        >>different custom action based on whether this is a first time install or
        >>an update. Does anyone have any idea if it's possible to set the
        >>Condition property of a custom action to determine if the currently
        >>running install is upgrading a previous installation and if so how? I'm
        >>also open to other methods of acheiving this functionality.
        >>
        >
        >

        Comment

        • Matt F

          #5
          Re: Deployment project - conditional custom action

          Linda,

          I assume your talking about setting the condition property of the custom
          action. The property appears to accept a text value --- is there an article
          or some other information showing the syntax for how to use this property?

          Also, I'm making a further assumption that the Installed property that your
          speaking of is a property of the windows installer itself. If this is the
          case and I'm testing the property in the commit cutom action, would it not
          already be returning a value of true?


          "Linda Liu [MSFT]" <v-lliu@online.mic rosoft.comwrote in message
          news:WTf9YeviHH A.6068@TK2MSFTN GHUB02.phx.gbl. ..
          Hi Matt,
          >
          Based on my understanding, you'd like to add a condition based on whether
          the MSI package is installed for the first time or not, on a custom
          action.
          If I'm off base, please feel free to let me know.
          >
          The Installed property is initialized if the product is already installed
          on the system. If you want to run a custom action only when the product is
          first installed, you can use Not Installed as a condition.
          >
          Hope this helps.
          If you have any question, please feel free to let me know.
          >
          Sincerely,
          Linda Liu
          Microsoft Online Community Support
          >
          =============== =============== =============== =====
          Get notification to my posts through email? Please refer to
          Find official documentation, practical know-how, and expert guidance for builders working and troubleshooting in Microsoft products.

          ications.
          >
          Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
          where an initial response from the community or a Microsoft Support
          Engineer within 1 business day is acceptable. Please note that each follow
          up response may take approximately 2 business days as the support
          professional working with you may need further investigation to reach the
          most efficient resolution. The offering is not appropriate for situations
          that require urgent, real-time or phone-based interactions or complex
          project analysis and dump analysis issues. Issues of this nature are best
          handled working with a dedicated Microsoft Support Engineer by contacting
          Microsoft Customer Support Services (CSS) at
          http://msdn.microsoft.com/subscripti...t/default.aspx.
          =============== =============== =============== =====
          >
          This posting is provided "AS IS" with no warranties, and confers no
          rights.
          >

          Comment

          • RobinS

            #6
            Re: Deployment project - conditional custom action

            I'm glad you figured out a way to get it to work. I'm using ClickOnce
            deployment, and I don't know that there's a way to tell.

            Robin S.
            ---------------------------
            "Matt F" <mfielderREMOVE CAPS@nospam.nos pamwrote in message
            news:e7$P9A1iHH A.1884@TK2MSFTN GP06.phx.gbl...
            I've released using a different method of determing what I need to know
            but I will need to get this resolved for future releases.
            >
            This s a windows installer project.
            >
            In the "commit" custom action, I need to call my application with a
            different command line parameter based on whether it's a new install or
            an upgrade to a previous install. The function of the command line
            parameter will determine whether to upgrade data from a previous
            installation or set up the base sample data for the application. Yes,
            it's possible for me to just check and see if the data is there, but
            there are firewall issues that make that a less than optimal solution.
            >
            "RobinS" <RobinS@NoSpam. yah.nonewrote in message
            news:r8Cdnf4Vkt oTo6jbnZ2dnUVZ_ oqmnZ2d@comcast .com...
            >How are you deploying it? ClickOnce? Or WindowsInstalle r?
            >>
            >What is the custom action that you need to perform?
            >>
            >Robin S.
            >----------------
            >"Matt F" <mfielderREMOVE CAPS@nospam.nos pamwrote in message
            >news:%23psu%23 heiHHA.872@TK2M SFTNGP03.phx.gb l...
            >>>I have a deployment project that I'm setting up. I need to perform a
            >>>different custom action based on whether this is a first time install or
            >>>an update. Does anyone have any idea if it's possible to set the
            >>>Condition property of a custom action to determine if the currently
            >>>running install is upgrading a previous installation and if so how? I'm
            >>>also open to other methods of acheiving this functionality.
            >>>
            >>
            >>
            >
            >

            Comment

            • Linda Liu [MSFT]

              #7
              Re: Deployment project - conditional custom action

              Hi Matt,

              Thank you for your prompt response.

              The 'Installed' property is a standard Windows Installer property, which
              returns the installation date time (in string) if the product has already
              been installed on the machine.

              There are only two major categories of custom actions. The category of a
              custom action is indicated by a number in the type column of the
              CustomAction table (You should be finding this table in Orca). The two
              categories are Deferred and Immediate.

              How you create the custom action in your MSI package? If you're using VS to
              create it, it should be Deferred.

              For Immediate custom action, we can specify the condition of the custom
              action as Not Installed or Installed="" for the condition of new
              installation, and Installed or Installed<>"" for upgrade installation.

              My test shows that the Installed property always returns an empty string
              when the deferred custom action is launched. In this case, you may add a
              custom property and set the value of the Installed property to this
              property in an Immediate custom action and then use this property as the
              condition on your deferred custom action.

              For more information on custom action, you may read the following article:

              Custom Action Tutorial Part I ¨C Custom Action Types and Sequences
              Ramblings about Software Architecture, .NET, Windows Installer, or any other topic that has my attention at the moment.

              ..html

              Hope this helps.


              Sincerely,
              Linda Liu
              Microsoft Online Community Support

              Comment

              • Linda Liu [MSFT]

                #8
                Re: Deployment project - conditional custom action

                Hi Matt,

                Sorry that I made a mistake in my previous reply.

                I was trying to get the value of the Installed property in a VB script file
                and create a commit custom action to run this VB script file in VS. The
                content of the VB script file is like the following:
                msgbox "Installed = " & Property("Insta lled")

                When I install the MSI package for the first time, the message box pops up
                showing an empty text. When I install the MSI package for the second time,
                the message box pops up still showing an empty text.

                I have read more about custom action later and realized that when a
                deferred custom action is encountered, its condition is evaluated. If the
                condition is met, the deferred custom action is written to the installation
                script, and will be executed later; otherwise, it is not added to the
                installation script.

                My previous test shows that when the deferrd custom action is executed, the
                value of the Installed property is an empty string. But my later test shows
                when the deferred custom action is encountered, the Installed property
                returns the correct value.

                So use Installed="" or Not Installed as the condition of your commit custom
                action for the first installation, and Installed<>"" or Installed as the
                condition of your commit custom action for the upgrade.

                If you're using VS to create the setup project, you coud specify the above
                condition in the custom action's Condition property entry in the Properties
                window.

                Hope this helps.
                If you have anything unclear, please feel free to let me know.

                Sincerely,
                Linda Liu
                Microsoft Online Community Support

                Comment

                • Matt F

                  #9
                  Re: Deployment project - conditional custom action

                  Linda,

                  I essentially have 2 custom actions set up -- each with a different action
                  that is performed, one for Installed and one for Not Installed. The problem
                  is if I run the installer against a previous version, Installed is not
                  evaluating to true.

                  I suspect what is actually happening is the setup determines there is a
                  previous version, uninstalls it, then procedes with installing as if for the
                  first time. If correct, that means the value of Installed is evaluated
                  after the previous version is uninstalled, but before the new version begins
                  installing.

                  I'm still stuck in the same place with this one.

                  "Linda Liu [MSFT]" <v-lliu@online.mic rosoft.comwrote in message
                  news:xcqQtujjHH A.4068@TK2MSFTN GHUB02.phx.gbl. ..
                  Hi Matt,
                  >
                  Sorry that I made a mistake in my previous reply.
                  >
                  I was trying to get the value of the Installed property in a VB script
                  file
                  and create a commit custom action to run this VB script file in VS. The
                  content of the VB script file is like the following:
                  msgbox "Installed = " & Property("Insta lled")
                  >
                  When I install the MSI package for the first time, the message box pops up
                  showing an empty text. When I install the MSI package for the second time,
                  the message box pops up still showing an empty text.
                  >
                  I have read more about custom action later and realized that when a
                  deferred custom action is encountered, its condition is evaluated. If the
                  condition is met, the deferred custom action is written to the
                  installation
                  script, and will be executed later; otherwise, it is not added to the
                  installation script.
                  >
                  My previous test shows that when the deferrd custom action is executed,
                  the
                  value of the Installed property is an empty string. But my later test
                  shows
                  when the deferred custom action is encountered, the Installed property
                  returns the correct value.
                  >
                  So use Installed="" or Not Installed as the condition of your commit
                  custom
                  action for the first installation, and Installed<>"" or Installed as the
                  condition of your commit custom action for the upgrade.
                  >
                  If you're using VS to create the setup project, you coud specify the above
                  condition in the custom action's Condition property entry in the
                  Properties
                  window.
                  >
                  Hope this helps.
                  If you have anything unclear, please feel free to let me know.
                  >
                  Sincerely,
                  Linda Liu
                  Microsoft Online Community Support
                  >

                  Comment

                  • Linda Liu [MSFT]

                    #10
                    Re: Deployment project - conditional custom action

                    Hi Matt,

                    Thank you for your feedback.

                    Based on my understanding, you have 2 custom actions in the MSI package.
                    When you launch the MSI package, you'd like one custom action to be
                    executed if the product is not installed, and the other custom action to be
                    executed if the product has been installed.

                    I performed a test on this but didn't reproduce the problem. I create 2
                    custom actions and specify 'Not Installed' as the condition of the first
                    custom action and 'Installed' as the condition of the second one. Build the
                    project and launch the MSI package.

                    When the MSI package is installed for the first time, the first custom
                    action is executed. When the MSI package is installed for the second time,
                    the second custom action is executed.
                    I suspect what is actually happening is the setup determines there is a
                    previous version, uninstalls it, then procedes with installing as if for
                    the
                    first time.

                    No, it shouldn't be the case. When the an MSI package is installed for a
                    second time, the previous installation won't be uninstalled, and the MSI
                    package will just replace the previous installed files.

                    In addition, When the custom action is met, the real installation, in this
                    case replacing the previous installed files, has not started and the value
                    of the 'Installed' property is true if the previous installation exists.

                    Sincerely,
                    Linda Liu
                    Microsoft Online Community Support

                    Comment

                    • Matt F

                      #11
                      Re: Deployment project - conditional custom action

                      Follow these steps to reproduce:

                      1: create an install with 2 custom actions
                      2: install the application - the custom action associated with Not Installed
                      is run
                      3: increment the version number in the installer (in my case, from 2.8 to
                      2.81)
                      3a: when asked to update the guid, say yes
                      4: rebuild the install
                      5: run the install on the same machine the app was installed to in step 2
                      6 - the custom action associated with Not Installed is run - this is the
                      problem - the one for Installed should run instead

                      "Linda Liu [MSFT]" <v-lliu@online.mic rosoft.comwrote in message
                      news:chWl5QBnHH A.1140@TK2MSFTN GHUB02.phx.gbl. ..
                      Hi Matt,
                      >
                      Thank you for your feedback.
                      >
                      Based on my understanding, you have 2 custom actions in the MSI package.
                      When you launch the MSI package, you'd like one custom action to be
                      executed if the product is not installed, and the other custom action to
                      be
                      executed if the product has been installed.
                      >
                      I performed a test on this but didn't reproduce the problem. I create 2
                      custom actions and specify 'Not Installed' as the condition of the first
                      custom action and 'Installed' as the condition of the second one. Build
                      the
                      project and launch the MSI package.
                      >
                      When the MSI package is installed for the first time, the first custom
                      action is executed. When the MSI package is installed for the second time,
                      the second custom action is executed.
                      >
                      >I suspect what is actually happening is the setup determines there is a
                      previous version, uninstalls it, then procedes with installing as if for
                      the
                      first time.
                      >
                      No, it shouldn't be the case. When the an MSI package is installed for a
                      second time, the previous installation won't be uninstalled, and the MSI
                      package will just replace the previous installed files.
                      >
                      In addition, When the custom action is met, the real installation, in this
                      case replacing the previous installed files, has not started and the value
                      of the 'Installed' property is true if the previous installation exists.
                      >
                      Sincerely,
                      Linda Liu
                      Microsoft Online Community Support
                      >

                      Comment

                      • Linda Liu [MSFT]

                        #12
                        Re: Deployment project - conditional custom action

                        Hi Matt,

                        Thank you for your prompt response.

                        I performed a test based on your steps and did see that the Installed
                        property returns false when the upgrade MSI package is installed.

                        In my previous test, I used the same MSI package, so the Installed property
                        returned true when the same MSI package was installed for the second time.

                        In your scenario, you should use the PREVIOUSVERSION SINSTALLED property,
                        which is a public property generated by VS.

                        For the custom action you want to execute when you install the MSI package
                        for the first time, use PREVIOUSVERSION SINSTALLED as the condition. For
                        the custom action you'd like to execute when upgrading, use Not
                        PREVIOUSVERSION SINSTALLED as the condition.

                        Please try my suggestion and let me know the result.

                        Sincerely,
                        Linda Liu
                        Microsoft Online Community Support

                        Comment

                        • Matt F

                          #13
                          Re: Deployment project - conditional custom action

                          Linda,

                          Thanks for getting back to me on this. Using the PREVIOUSVERSION INSTALLED
                          condition seems to handle what I need beautifully. I still have some
                          internal testing to do, but I'm not expecting any of those tests to fail.
                          Thank you!!!

                          As long as we're in this thread, are the available properties documented
                          someplace? I'd be curious to see what else is available.

                          "Linda Liu [MSFT]" <v-lliu@online.mic rosoft.comwrote in message
                          news:zoslZmEnHH A.1140@TK2MSFTN GHUB02.phx.gbl. ..
                          Hi Matt,
                          >
                          Thank you for your prompt response.
                          >
                          I performed a test based on your steps and did see that the Installed
                          property returns false when the upgrade MSI package is installed.
                          >
                          In my previous test, I used the same MSI package, so the Installed
                          property
                          returned true when the same MSI package was installed for the second time.
                          >
                          In your scenario, you should use the PREVIOUSVERSION SINSTALLED property,
                          which is a public property generated by VS.
                          >
                          For the custom action you want to execute when you install the MSI package
                          for the first time, use PREVIOUSVERSION SINSTALLED as the condition. For
                          the custom action you'd like to execute when upgrading, use Not
                          PREVIOUSVERSION SINSTALLED as the condition.
                          >
                          Please try my suggestion and let me know the result.
                          >
                          Sincerely,
                          Linda Liu
                          Microsoft Online Community Support
                          >

                          Comment

                          • Linda Liu [MSFT]

                            #14
                            Re: Deployment project - conditional custom action

                            Hi Matt,

                            The PREVIOUSVERSION INSTALLED is not a standard MSI property. It's generated
                            by Visual Studio.

                            If you open the MSI package using Orca, and open the Upgrade table, you
                            should see PREVIOUSVERSION INSTALLED in the ActionProperty column.

                            For more information on MSI property, you may refer to the following MSDN
                            document:

                            'Property Reference'


                            Hope this helps.


                            Sincerely,
                            Linda Liu
                            Microsoft Online Community Support

                            Comment

                            Working...