Sora.
Sora.

Reputation: 1475

Opening a file in a Metro app from command line

I need a way to open a file in a Metro app from command line.

So far I've figured out how to start the app from command line without any third-party scripts

explorer shell:AppsFolder\Microsoft.Reader_8wekyb3d8bbwe!Microsoft.Reader

but I haven't been able to figure out how to include a file name yet.

Launching

explorer shell:AppsFolder\Microsoft.Reader_8wekyb3d8bbwe!Microsoft.Reader example.pdf

just opens up a default explorer window.

Any idea from Windows 8 experts on how to accomplish this without any third-party tools/cmdlets/etc.?

Note: In fact I'm using Windows 10 but I guess if there's a Windows 8 / 8.1 way to do it, it'll work for 10, too.

Upvotes: 14

Views: 8682

Answers (5)

Mark McClelland
Mark McClelland

Reputation: 5328

The best way I've found to pass command-line arguments to the executable targeted by the shell command is via the Windows start command.

Using your example, you would end up with this:

start "" shell:AppsFolder\Microsoft.Reader_8wekyb3d8bbwe!Microsoft.Reader example.pdf

I don't have Microsoft.Reader installed, so I can't test that. However, I can verify that this pattern works with Windows Terminal. In this case, I pass it a command-line argument to tell it which profile I want to open.

start "" shell:AppsFolder\Microsoft.WindowsTerminal_8wekyb3d8bbwe!App new-tab -p "GitBash"

The first argument to the start command here — the empty string — is just the title of the window.

You can also pair this with cmd /c, which I've found is necessary for some launcher applications, such as my personal favorite, SlickRun:

cmd /c start "" shell:AppsFolder\Microsoft.WindowsTerminal_8wekyb3d8bbwe!App new-tab -p "GitBash"

I have a blog post with more info on running Modern apps from the command line, which you might find helpful in constructing these ridiculously obtuse commands.

Upvotes: 2

Castamos
Castamos

Reputation: 483

Not sure if it works on Windows 8, but on Windows 10 I use this:

cmd /C start <app-name>:

For example, to start Slack:

cmd /C start slack:

Upvotes: 1

user6438653
user6438653

Reputation:

Store Apps can only be started by the shell. So try this:

explorer.exe shell:AppsFolder\Microsoft.WindowsAlarms_8wekyb3d8bbwe!App

Or from run (Win+R):

shell:AppsFolder\Microsoft.WindowsAlarms_8wekyb3d8bbwe!App

Upvotes: 4

K .
K .

Reputation: 345

If you're still looking for the answer, the best way to open a file in a metro app is to use an execution string like a normal app protocol does. The execution string looks like this:

bingnews:[arguments, can be left blank.]
microsoftvideo:[arguments, can be left blank.]
netflix:[arguments, can be left blank.]

So, to start up netflix, it's as simple as typing in Start netflix: into the command line.

To find the execution string for an app, go here: Control Panel\Programs\Default Programs\Set Associations


More info and examples can be found here.

http://windowsitpro.com/windows-8/opening-windows-8-apps-command-prompt-or-script

http://www.itsjustwhatever.com/2012/10/28/launch-windows-8-metro-apps-from-a-desktop-shortcut-or-command-line/


PLEASE NOTE: To open an app WITHOUT A PROTOCOL (One not listed in the registry or under "Set Associations") use OP's method:

explorer shell:AppsFolder\[appuid]![appfullname]

The app UID is the folder name without the version number. For example,

4DF9E0F8.Netflix_2.11.0.8_x64__mcm4njqhnhss8

becomes

4DF9E0F8.Netflix_mcm4njqhnhss8

The app fullname is the [App author].[App name] For example, 4DF9E0F8.Netflix. 4DF9E0F8 is the author, and Netflix is the name.

Put it all together to get

explorer shell:AppsFolder\4DF9E0F8.Netflix_mcm4njqhnhss8!4DF9E0F8.Netflix

Upvotes: 9

Rob Caplan - MSFT
Rob Caplan - MSFT

Reputation: 21919

If the app is the default handler then you can just launch the file or protocol. There isn't a good in-box way to launch a file into a non-default handler from the command line.

Windows Store apps aren't designed to run from the command line and there isn't a straightforward way to launch them from the command line. Apps which handle specific files or protocols receive them through FileActivatedEventArgs or ProtocolActivatedEventArgs rather than command line arguments

You could write a launcher app which uses CLSID_ApplicationActivationManager's IApplicationActivationManager to ActivateForFile a specific app.

Upvotes: 2

Related Questions