cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
JMP is taking Discovery online, April 16 and 18. Register today and join us for interactive sessions featuring popular presentation topics, networking, and discussions with the experts.
Choose Language Hide Translation Bar
kyle_lamson
Level II

Clickonce Application

Does anyone have the syntax needed to run a clickonce application. I've tried

RunProgram(executable("clickonce application"));

Which I figured wouldn't work. Are there any other options?

4 REPLIES 4
txnelson
Super User

Re: Clickonce Application

The following might be of use, it was taken from:

http://www.brad-smith.info/blog/archives/535

Starting ClickOnce applications

Unlike normal executables, applications deployed using ClickOnce are started using a bootstrapper (which is normally handled by the shell). This includes applications written in Windows Forms, WPF or Silverlight. Shortcuts to ClickOnce apps have the extension .appref-ms (rather than .lnk for regular shortcuts), and these files are not recognised by the start command (as in the previous example).

Thankfully, they can be run using the following syntax:

1rundll32.exe dfshim.dll,ShOpenVerbShortcut [path to appref-ms file]

Where [path to appref-ms file] is the full path to the ClickOnce shortcut file. The path may include environment variables such as %USERPROFILE% if, for example, you want to point to a shortcut on the user’s desktop.

How does this work?

  • The rundll32 command executes a function in a Win32 DLL as if it were an executable file. You might want to use this when you have a function which is predominantly called from code (but still operates independently), if you want to avoid creating many executables when a single DLL will suffice, or to deliberately obfuscate a command that users are not intended to start.
  • dfshim.dll is responsible for much of the functionality in ClickOnce; it contains functions to install, remove, start and update applications, and is distributed as part of the .NET Framework.
  • The name of the function we want is ShOpenVerbShortcut, which is the same function that the windows shell uses to run .appref-ms shortcut files. You simply pass a path to the function and it takes care of the rest.
Jim
pzang
Level III

Re: Clickonce Application

The rundll32 method works by itself but I cannot find a way to pass parameter to the .appref-ms.  I eventually solved the problem by using the following:

 

 

RunProgram(
	executable( "cmd.exe" ),
	options(
		{"/c",
		"\!"PathToShortcut.appref-ms\!"",
		"parameter"}
	),
	readfunction( "text" )
);

I added the double quotes to my PathToShortcut.appref-ms because it has spaces.

 

pzang
Level III

Re: Clickonce Application

Using the rundll32 method, the parameter can be passed to the clickonce program like below:

RunProgram(
	executable( "rundll32.exe" ),
	options( {"dfshim.dll,ShOpenVerbShortcut","PathToShortcut.appref-ms|parameter"} ), 
	readfunction( "text" )
);

 

kyle_lamson
Level II

Re: Clickonce Application

I figured it out after enough poking around.

web("clickonce application.appref-ms");