14

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.

Sora.
  • 1,395
  • 1
  • 11
  • 14

5 Answers5

9

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

Kevin
  • 348
  • 4
  • 13
  • 1
    This is tantalizingly close to what I wanted, except how do I know if the metro-style app is the default, and therefore, to use this method? – Arafangion Jun 09 '15 at 06:23
  • To know more about protocols, and which app will open by a specific protocol, open `Settings`, choose `System`, click on the `Default apps` tab on the sidebar, and scroll down until you find `Choose default apps by protocol`. – Lloyd Dominic Jun 07 '17 at 09:45
4

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
2

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.

Rob Caplan - MSFT
  • 21,714
  • 3
  • 32
  • 54
2

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.

Mark McClelland
  • 4,980
  • 4
  • 35
  • 48
  • Works. Found after much research. Thanks. But I want to put this whole thing with the argument in a shortcut and that only works with cmd /c. But the cmd window blinks which spoils the fun. – user173399 Jan 29 '22 at 11:00
  • @user173399 - A variety of workarounds to the briefly-visible-cmd-window problem can be found here: https://superuser.com/questions/62525/run-a-batch-file-in-a-completely-hidden-way – Mark McClelland Jan 30 '22 at 14:20
1

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:
roy
  • 463
  • 5
  • 10