NodeJS Confirmation Prompt - node.js

I am writing a short JS script and will make a .exe out of it.
This script simply copies certain files and folders (embedded on the exe file - using pkg module).
Since this is on Node, is there any way I can add a confirmation message first before the actual script is called? Something like "This will copy files to your this and that. Do you want to proceed?" AFAIK, the confirmation prompts are only supported on browser mode.
I am aware of the readline module, but what I need is a more user-friendly UI such as a popup confirmation window.
Help! Thanks!

Related

How to create a SnoreToast start menu shortcut with a Working Directory to a .BAT file?

Using node-notifier#7.0.0's SnoreToast on NodeJS v13.13.0, I am trying to create a Start Menu shortcut to use as appID for SnoreToast's notifications, I have a .BAT file that runs the command node "src\index.js", and I'm assigning this .BAT file as the target application of the SnoreToast shortcut as seen below:
"..\node_modules\node-notifier\vendor\snoreToast\snoreToast-x64.exe" -install "SomeAppName\SomeAppName" "c:\Users\Redacted\Desktop\proj\start.bat" "app.someappname"
The shortcut is successfully installed on the Start Menu in a folder named SomeAppName and the shortcut itself named SomeAppName aswell, and when I open the shortcut, it targets the correct start.bat file, but the start.bat is unable to fullfill it's purpose due to the shortcut opening it on C:/WINDOWS/System32 and ultimately wrongly targets C:/WINDOWS/System32/src/index.js, causing it to fail.
By manually editing the shortcut's "Start in" option on the Properties dialog in File Explorer to the correct path of my project (C:/Users/Redacted/Desktop/proj) and saving, it runs perfectly, but obviously I don't want to make my users have to manually do this work + the application should be portable and runnable anywhere it's stored on the FS, so how would I edit the "Start in" (aka Working Directory) of a SnoreToast shortcut on creation? I've already tried to Google it but all the results are unrelated and SnoreToast's documentation doesn't address this issue either.
A solution that does not require any additional npm packages would be preferred, but one that uses an npm package is acceptable aswell. All help is appreciated.

Run Buffer(.exe) without writing files in Nodejs

Suppose I had a console app in the terminal I created using C language, shouting "Hello world!"
The program is called hello.exe.
I upload hello.exe to static server.
Now I can download the file by typing the following address in the chrome.
http://localhost:8080/hello.exe
Or I can get a Blob object using the http method in Nodejs.
Is there a way to run this obtained Blob object right away without making a file? And get string Hello world!
No similar topics were found.
Do I need to create and run the file and erase it right away?
I want is for the files to run and not remain on my PC.
I'm not aware of any way to run an .exe file without first putting it on disk. You would essentially need to write your own exe loader that worked from memory instead of disk and that would be no small effort.
Keep in mind that a client that just automatically runs some executable it gets from a URL like http://somedomain.com/hello.exe without any user intervention could be a very dangerous client as rogue web servers could send it any arbitrary executable that did all sorts of harm (viruses, ransom-ware, etc...).
Do I need to create and run the file and erase it right away?
Yes, erase it after the program is done running.
I want is for the files to run and not remain on my PC.
You will just have to clean it up at some point after it has run. If you have a programmatic client, it should be no big deal to put the file in an application-level temporary directory that your app can regular clean up. If this is from a browser, then he user controls where the file goes on disk and the user controls when it gets deleted - you can't manage that yourself from within a webpage.
Or I can get a Blob object using the http method in Nodejs.
You can download a binary. Not sure exactly what you're asking here.

Trigger system default Open With dialog - Electron

I have created an application using Electron, one feature of which is that user can add files to it(copied to application's data directory).
When user wants to open file from application's UI, I am able to open file using Electron's shell module: shell.openItem().
Now I want to give user an option to trigger system's "Open With" dialog(shown below for windows) from where user can choose with which application user want's to open the file. I search docs for Electron and googled it but not able to find a way to trigger this dialog. Any idea how this can be done for all platforms electron supports. Solution which involves calling an OS specific command to trigger this dialog is also as good.

open chrome-devtools:// URL from script/command line, NOT via copy paste

In order to automate running and debugging node.js applications the debug URL needs to be opened from a script; eg.:
chromium "chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9230/9229"&
If I copy paste the URL in chromium is working fine.
however as I have stated this step needs to be automated.
How to open an URL of the form chrome-devtools://devtools/bundled/inspector.html in chromium/google-chrome from script or command line (Linux)?
It's not clear if your goal is just to have this automated for you, or if you want to figure out a way to script this yourself.
That said, there is a package on NPM called inspect-process that automates the process of opening DevTools windows. (Github). It serves as a replacement on the command-line for node. e.g.:
inspect myScript.js instead of node myScript.js
and it automatically opens up a DevTools window.
If you needed to script this process yourself you could likely use code from that package as well.
At the moment, this doesn't appear to be possible. I did find this bug report in the Chrome forums.
The only solution I was able to find was to use AppleScript as described here, but you said Linux so that won't be of much help to you.

Making a Windows Installer communicate with a Chrome extension without NPAPI

I have a windows application which installs a Chrome extension via the windows registry. I wish for this application to generate some one-time information for Chrome to read based on information typed in by the user during the installation process.
Assuming I am not using NPAPI in the Chrome extension, is there anywhere the installer can place information such that the extension will see it?
Edit: I also wish to launching chrome at the end of the installation.
Another way you can pass information to an installed extension from outside of Chrome is to have a page with your extension that you then open Chrome too and pass the info in the hash...such as....
chrome.exe "chrome-extension://emcggffhhapbbkcodabdliakappfibcf/showHash.html#info"
Problem with this method is your installing the extension using the simple registry method (Im guessing) and not using the Policy method. With the Policy method you can force an install and it will happen even if Chrome is allready open (where as according to the docs the simple method happens the next time Chrome is opened). Downside to this is you will have to make an uninstaller yourself as you cant uninstall an extension from Chrome that is installed with this method. Im also not sure how quick/often it will be before the extension is installed (couldnt find it in the docs and too lazy to try it ;)) and youd need to make your installer wait a bit for it to be installed....
http://www.chromium.org/developers/how-tos/adding-new-policies
http://dev.chromium.org/administrators/policy-list-3#ExtensionInstallForcelist
http://dev.chromium.org/administrators/policy-templates (says where in the registry to add them)
Another possible method could be to pack the extension at install time and add a file with the info that the extension could read. Problem with this method is that the extensions ID would change (might not be a problem for you?) or youll have to include the PEM in your installer which you probably dont want to do....
chrome.exe --pack-extension="C:\simple-example" --no-message-box
Many people wish there were an event firing on extension installing.
There's a workaround, not elegant way to send info to the browser from outside: launch chrome asking to open an url.
I use it with a local html file. My application execute a command line like:
"pathToChrome\Chrome.exe" "file://pathToHtmlFile/myFile.html?param1=value1&param2=value2"
The info I pass are the page's parameters.
The catch is that this page is read by the extensions in one of many ways:
You can write a content script this page will fire
You can put some javascript on this page to write down the parameters as cookies, for the extension to read in the future (without calling the extension at this time)
It hasn't to be a local page. If your page is on a server, it can save the parameters in the server, ir it worthy.
It hasn't to be even your page. You can call any page on Internet, but beeing sure it will fire your content script extension, and it will read your "customized" parameters.
Instead of communicating through the windows registry, you can create a WebSQL from the installer and from the extension read the data from there.
You will need to a bit of research about how to this, but this is possible. the steps should be:
The installer will create the database and register to chrome (maybe with the Databases.db)
The extension will use openDatabase to create a connection to the database
The extension will do a transaction and read the needed file.
Another option is to add file to the crx for example "installer_info.json" and do an AJAX request from the extension to the "installer_info.json" file.
There is no formal way for doing this things, little research and you will have a way.

Resources