Windows: update custom software installed on Program Files





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







1















Im the developer of a Windows software application which I currently release as "portable", meaning the user needs to extract it somewhere into his disk. Along with it I ship a small update tool (external app / python script converted into an .exe through pyinstaller) that handles updates as follows:




  1. Main app calls the update tool in the background and quits

  2. Update tool runs: fetches new files, removes files in the main app directory and extract new ones (the new main app .exe, dlls, and
    other files that might be required)

  3. Update tool call main app again


Questions: by creating an installer (NSIS / InnoSetup) and letting the user to install the app in Program Files, will I be able to keep this update tool? I mean, can it have enought permissions to do the update like that? If not, how can/should the updates be done?










share|improve this question





























    1















    Im the developer of a Windows software application which I currently release as "portable", meaning the user needs to extract it somewhere into his disk. Along with it I ship a small update tool (external app / python script converted into an .exe through pyinstaller) that handles updates as follows:




    1. Main app calls the update tool in the background and quits

    2. Update tool runs: fetches new files, removes files in the main app directory and extract new ones (the new main app .exe, dlls, and
      other files that might be required)

    3. Update tool call main app again


    Questions: by creating an installer (NSIS / InnoSetup) and letting the user to install the app in Program Files, will I be able to keep this update tool? I mean, can it have enought permissions to do the update like that? If not, how can/should the updates be done?










    share|improve this question

























      1












      1








      1








      Im the developer of a Windows software application which I currently release as "portable", meaning the user needs to extract it somewhere into his disk. Along with it I ship a small update tool (external app / python script converted into an .exe through pyinstaller) that handles updates as follows:




      1. Main app calls the update tool in the background and quits

      2. Update tool runs: fetches new files, removes files in the main app directory and extract new ones (the new main app .exe, dlls, and
        other files that might be required)

      3. Update tool call main app again


      Questions: by creating an installer (NSIS / InnoSetup) and letting the user to install the app in Program Files, will I be able to keep this update tool? I mean, can it have enought permissions to do the update like that? If not, how can/should the updates be done?










      share|improve this question














      Im the developer of a Windows software application which I currently release as "portable", meaning the user needs to extract it somewhere into his disk. Along with it I ship a small update tool (external app / python script converted into an .exe through pyinstaller) that handles updates as follows:




      1. Main app calls the update tool in the background and quits

      2. Update tool runs: fetches new files, removes files in the main app directory and extract new ones (the new main app .exe, dlls, and
        other files that might be required)

      3. Update tool call main app again


      Questions: by creating an installer (NSIS / InnoSetup) and letting the user to install the app in Program Files, will I be able to keep this update tool? I mean, can it have enought permissions to do the update like that? If not, how can/should the updates be done?







      windows installer nsis






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Mar 5 at 17:07









      msrmsr

      1062




      1062






















          1 Answer
          1






          active

          oldest

          votes


















          1














          It sounds like you just need to have the updater app be able to elevate privileges.
          I found the following gist here:
          https://gist.github.com/GaryLee/d1cf2089c3a515691919



          import sys
          import ctypes

          def run_as_admin(argv=None, debug=False):
          shell32 = ctypes.windll.shell32
          if argv is None and shell32.IsUserAnAdmin():
          return True

          if argv is None:
          argv = sys.argv
          if hasattr(sys, '_MEIPASS'):
          # Support pyinstaller wrapped program.
          arguments = map(unicode, argv[1:])
          else:
          arguments = map(unicode, argv)
          argument_line = u' '.join(arguments)
          executable = unicode(sys.executable)
          if debug:
          print 'Command line: ', executable, argument_line
          ret = shell32.ShellExecuteW(None, u"runas", executable, argument_line, None, 1)
          if int(ret) <= 32:
          return False
          return None


          if __name__ == '__main__':
          ret = run_as_admin()
          if ret is True:
          print 'I have admin privilege.'
          raw_input('Press ENTER to exit.')
          elif ret is None:
          print 'I am elevating to admin privilege.'
          raw_input('Press ENTER to exit.')
          else:
          print 'Error(ret=%d): cannot elevate privilege.' % (ret, )





          share|improve this answer
























            Your Answer








            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "3"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1411535%2fwindows-update-custom-software-installed-on-program-files%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            It sounds like you just need to have the updater app be able to elevate privileges.
            I found the following gist here:
            https://gist.github.com/GaryLee/d1cf2089c3a515691919



            import sys
            import ctypes

            def run_as_admin(argv=None, debug=False):
            shell32 = ctypes.windll.shell32
            if argv is None and shell32.IsUserAnAdmin():
            return True

            if argv is None:
            argv = sys.argv
            if hasattr(sys, '_MEIPASS'):
            # Support pyinstaller wrapped program.
            arguments = map(unicode, argv[1:])
            else:
            arguments = map(unicode, argv)
            argument_line = u' '.join(arguments)
            executable = unicode(sys.executable)
            if debug:
            print 'Command line: ', executable, argument_line
            ret = shell32.ShellExecuteW(None, u"runas", executable, argument_line, None, 1)
            if int(ret) <= 32:
            return False
            return None


            if __name__ == '__main__':
            ret = run_as_admin()
            if ret is True:
            print 'I have admin privilege.'
            raw_input('Press ENTER to exit.')
            elif ret is None:
            print 'I am elevating to admin privilege.'
            raw_input('Press ENTER to exit.')
            else:
            print 'Error(ret=%d): cannot elevate privilege.' % (ret, )





            share|improve this answer




























              1














              It sounds like you just need to have the updater app be able to elevate privileges.
              I found the following gist here:
              https://gist.github.com/GaryLee/d1cf2089c3a515691919



              import sys
              import ctypes

              def run_as_admin(argv=None, debug=False):
              shell32 = ctypes.windll.shell32
              if argv is None and shell32.IsUserAnAdmin():
              return True

              if argv is None:
              argv = sys.argv
              if hasattr(sys, '_MEIPASS'):
              # Support pyinstaller wrapped program.
              arguments = map(unicode, argv[1:])
              else:
              arguments = map(unicode, argv)
              argument_line = u' '.join(arguments)
              executable = unicode(sys.executable)
              if debug:
              print 'Command line: ', executable, argument_line
              ret = shell32.ShellExecuteW(None, u"runas", executable, argument_line, None, 1)
              if int(ret) <= 32:
              return False
              return None


              if __name__ == '__main__':
              ret = run_as_admin()
              if ret is True:
              print 'I have admin privilege.'
              raw_input('Press ENTER to exit.')
              elif ret is None:
              print 'I am elevating to admin privilege.'
              raw_input('Press ENTER to exit.')
              else:
              print 'Error(ret=%d): cannot elevate privilege.' % (ret, )





              share|improve this answer


























                1












                1








                1







                It sounds like you just need to have the updater app be able to elevate privileges.
                I found the following gist here:
                https://gist.github.com/GaryLee/d1cf2089c3a515691919



                import sys
                import ctypes

                def run_as_admin(argv=None, debug=False):
                shell32 = ctypes.windll.shell32
                if argv is None and shell32.IsUserAnAdmin():
                return True

                if argv is None:
                argv = sys.argv
                if hasattr(sys, '_MEIPASS'):
                # Support pyinstaller wrapped program.
                arguments = map(unicode, argv[1:])
                else:
                arguments = map(unicode, argv)
                argument_line = u' '.join(arguments)
                executable = unicode(sys.executable)
                if debug:
                print 'Command line: ', executable, argument_line
                ret = shell32.ShellExecuteW(None, u"runas", executable, argument_line, None, 1)
                if int(ret) <= 32:
                return False
                return None


                if __name__ == '__main__':
                ret = run_as_admin()
                if ret is True:
                print 'I have admin privilege.'
                raw_input('Press ENTER to exit.')
                elif ret is None:
                print 'I am elevating to admin privilege.'
                raw_input('Press ENTER to exit.')
                else:
                print 'Error(ret=%d): cannot elevate privilege.' % (ret, )





                share|improve this answer













                It sounds like you just need to have the updater app be able to elevate privileges.
                I found the following gist here:
                https://gist.github.com/GaryLee/d1cf2089c3a515691919



                import sys
                import ctypes

                def run_as_admin(argv=None, debug=False):
                shell32 = ctypes.windll.shell32
                if argv is None and shell32.IsUserAnAdmin():
                return True

                if argv is None:
                argv = sys.argv
                if hasattr(sys, '_MEIPASS'):
                # Support pyinstaller wrapped program.
                arguments = map(unicode, argv[1:])
                else:
                arguments = map(unicode, argv)
                argument_line = u' '.join(arguments)
                executable = unicode(sys.executable)
                if debug:
                print 'Command line: ', executable, argument_line
                ret = shell32.ShellExecuteW(None, u"runas", executable, argument_line, None, 1)
                if int(ret) <= 32:
                return False
                return None


                if __name__ == '__main__':
                ret = run_as_admin()
                if ret is True:
                print 'I have admin privilege.'
                raw_input('Press ENTER to exit.')
                elif ret is None:
                print 'I am elevating to admin privilege.'
                raw_input('Press ENTER to exit.')
                else:
                print 'Error(ret=%d): cannot elevate privilege.' % (ret, )






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Mar 5 at 18:35









                Eddie DunnEddie Dunn

                60136




                60136






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Super User!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1411535%2fwindows-update-custom-software-installed-on-program-files%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Index of /

                    Tribalistas

                    Listed building