derryleng / Shiny_Desktop_App

Deploy your R Shiny app(s) locally on Windows
MIT License
49 stars 13 forks source link

Appreciation for a unique solution! #3

Open Mohammedkb opened 6 days ago

Mohammedkb commented 6 days ago

Greetings Derry,

Just wanted to drop you a message of high appreciation for your efforts to compile this perfect solution. I must admit that it is a heck of a slick solution! Thank you for publishing it.

I've spent a few days trying to use the RInno package as the only solution I could find to convert my Shiny App into a standalone app. Unfortunately, with all the trials of tweaking and manipulating the functions and parameters inside the package my efforts were all to no avail! RInno is cumbersome and buggy. But with your solution, I managed to compile my Shiny App effortlessly.

I'd like to mention that I made a couple minor changes in your procedure that I personally find adding value to the end App:

  1. The end app runs the cmd screen which must be open while the app is running. This might be annoying to the user and will stop the app if closed. So, I created a .vbs file (run_silent) which contains the following lines to open the run.bat file. The .vbs file is then referenced in the .iss MyAppExeName variable instead of the run.bat file.

Set WshShell = CreateObject("WScript.Shell") currentDir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) WshShell.Run """" & currentDir & "\run.bat""", 0, False

  1. With the current procedure the installed app directories and files will be visible and easily accessible to the end user if s/he tries to look for them. Hence, to protect files from manipulation or viewing, especially those proprietary ones, I added "Encryption=yes" under .iss [Setup] and "Attribs: hidden system" under the .iss {Files]/Source. This makes the files obscured in the system directory. Though it is not the best security method, this is what I could find given my limited knowledge in this area.

  2. Added a password prompt before installing the app to prevent installing the app by unintended users. This is achieved by adding "Password={#mystrongpassword}" in the [Setup] of the .iss file.

  3. Added an icon to the app to be used in the setup and in the shortcut. Achieved by creating a .ico icon and referencing it in the [Files] and [Icos] sections of the .iss file.

Again, many thanks for making your user-friendly solution available.

Regards, Mohammed Barakat

derryleng commented 5 days ago

Hi Mohammed,

Thank you for your response and I am very glad that you have found this solution to be useful.

It is very interesting to hear about your changes, such as to make the cmd window hidden from the end user, I have also debated whether this is a good approach. I ultimately decided against it as the console outputs may prove useful to end users as some apps may make use of logging and a visibile console is very useful to aid in troubleshooting any errors. Additionally, on first launch if the user needs to download additional R packages, this may take some time before the app starts and the user may perceive this as the app being slow or not working properly, and attempt to launch the app multiple times and slowing their PC to a crawl (I have personally witnessed this). This may be something to consider if you are hiding the cmd window.

If you do not wish to distribute your source code to end users then the only feasible method that I would suggest would be to host your application. You can use any cloud service provider to set up a cloud VM from which to run a Shiny server (for reference, a provider I have used in the past is DigitalOcean). Alternatively, Posit (who makes RStudio) with their shinyapps.io hosting service specifically for Shiny apps has a free tier which is good for testing, might be a better place to start.

Please feel free to keep in touch and contribute to the repo if you have any issues or suggestions going forward!

Best regards, Derry

On Fri, 1 Nov 2024 at 05:59, Mohammed Barakat @.***> wrote:

Greetings Derry,

Just wanted to drop you a message of high appreciation for your efforts to compile this perfect solution. I must admit that it is a heck of a slick solution! Thank you for publishing it.

I've spent a few days trying to use the RInno package as the only solution I could find to convert my Shiny App into a standalone app. Unfortunately, with all the trials of tweaking and manipulating the functions and parameters inside the package my efforts were all to no avail! RInno is cumbersome and buggy. But with your solution, I managed to compile my Shiny App effortlessly.

I'd like to mention that I made a couple minor changes in your procedure that I personally find adding value to the end App:

  1. The end app runs the cmd screen which must be open while the app is running. This might be annoying to the user and will stop the app if closed. So, I created a .vbs file (run_silent) which contains the following lines to open the run.bat file. The .vbs file is then referenced in the .iss MyAppExeName variable instead of the run.bat file.

Set WshShell = CreateObject("WScript.Shell") currentDir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) WshShell.Run """" & currentDir & "\run.bat""", 0, False

2.

With the current procedure the installed app directories and files will be visible and easily accessible to the end user if s/he tries to look for them. Hence, to protect files from manipulation or viewing, especially those proprietary ones, I added "Encryption=yes" under .iss [Setup] and "Attribs: hidden system" under the .iss {Files]/Source. This makes the files obscured in the system directory. Though it is not the best security method, this is what I could find given my limited knowledge in this area. 3.

Added a password prompt before installing the app to prevent installing the app by unintended users. This is achieved by adding "Password={#mystrongpassword}" in the [Setup] of the .iss file. 4.

Added an icon to the app to be used in the setup and in the shortcut. Achieved by creating a .ico icon and referencing it in the [Files] and [Icos] sections of the .iss file.

Again, many thanks for making your user-friendly solution available.

Regards, Mohammed Barakat

— Reply to this email directly, view it on GitHub https://github.com/derryleng/Shiny_Desktop_App/issues/3, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALKILLCPDAFSSYIG4HZ5PYTZ6MKDZAVCNFSM6AAAAABQ7WNHASVHI2DSMVQWIX3LMV43ASLTON2WKOZSGYZDQMZZGA4DMMA . You are receiving this because you are subscribed to this thread.Message ID: @.***>