Limited Time Offer!

For Less Than the Cost of a Starbucks Coffee, Access All DevOpsSchool Videos on YouTube Unlimitedly.
Master DevOps, SRE, DevSecOps Skills!

Enroll Now

Quick Launch shortcut in Vista and Windows 7

InstallerGeek created the topic: Quick Launch shortcut in Vista and Windows 7
The right substitute for Vista/XP like Quick Launch shortcut is to make the link pinned to the taskbar (IMO).
>
> It appears as simple as putting the shortcut in User Pinned\TaskBar subfolder of Quick Launch folder in Windows 7.
>
>
>
>
>
>
>
>
>

>

>

>

>
> Now, I can condition the installation of the component containing the Shortcut element.
> When OS is Windows 7 shortcut gets created in QL6 directory, otherwise in QL4.
>
> Since this would unnecessarily create User Pinned\TaskBar folders on Vista and XP, does anybody know if there is a more elegant way to accomplish the same goal?

applicationPackaging replied the topic: Re: Quick Launch shortcut in Vista and Windows 7
Tony, how do you catch the case, that your user only can install applications elevated as administrator (don’t assume everybody is admin on his/her machine)? Wouldn’t the quick launch shortcut then only appear on the administrator’s quick launch bar and hence is invisible for the normal user(s)?

Tom

applicationPackaging replied the topic: Re: Quick Launch shortcut in Vista and Windows 7
Because of various other factors, I require from users to have admin rights when installing and running the app. So this is not a problem for me (at least not for now).

But you don’t have to be admin to install the application. Administrator can approve of certain MSI to be installed by non-elevated users on his network and MSI takes care of elevating the rights so that, for example, folders and files can be created in Program Files.

I tested this scenario once: I allowed all users on my machine to run MSI and as non-elevated user I had no problem installing the app. I had problems running it because some of installed apps write to Program Files subfolders, but that’s another issue.

applicationPackaging replied the topic: Re: Quick Launch shortcut in Vista and Windows 7
I am not sure if I understood the question well and if my previous response makes sense. But this is how would I try doing it if I had to do it and if WiX didn’t let me do declaratively:

Even if MSI (or more correctly parts of install) run with elevated privileges, I think that immediate custom action runs non-elevated and I can find current user’s ApplicationData folder via Shell API call GetSpecialFolder. I can then create shortcut links programmatically in custom action code as seen below (I don’t know where I got it from, probably some MSDN article).

//
//
// CreateLink – uses the Shell’s IShellLink and IPersistFile interfaces
// to create and store a shortcut to the specified object.
//
// Returns the result of calling the member functions of the interfaces.
//
// Parameters:
// lpszPathObj – address of a buffer containing the path of the object.
// lpszPathLink – address of a buffer containing the path where the
// Shell link is to be stored.
// lpszDesc – address of a buffer containing the description of the
// Shell link.
// lpszIconLink – address of a buffer containing the path where the
// Shell link icon can be found.
// index – index of the icon
//

HRESULT CreateLink(LPCTSTR lpszPathObj, LPCTSTR lpszPathLink, LPCTSTR lpszDesc, LPCTSTR lpszIconLink, int index) {
HRESULT hres;
IShellLink* psl;

// Get a pointer to the IShellLink interface.
hres=::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
IID_IShellLink, (LPVOID*)&psl);
if(SUCCEEDED(hres))
{
IPersistFile* ppf;

// Set the path to the shortcut target and add the description.
psl->SetPath(lpszPathObj);
psl->SetDescription(lpszDesc);
if(lpszIconLink!=0)
psl->SetIconLocation(lpszIconLink, index);

// Query IShellLink for the IPersistFile interface for saving the
// shortcut in persistent storage.
hres=psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);

if(SUCCEEDED(hres))
{
USES_CONVERSION;

// Ensure that the string is Unicode.
LPWSTR wsz=CT2W(lpszPathLink);

// Add code here to check return value from MultiByteWideChar
// for success.

// Save the link by calling IPersistFile::Save.
hres = ppf->Save(wsz, TRUE);
ppf->Release();
}
psl->Release();
}
return hres;
}
InstallerGeek replied the topic: Re: Quick Launch shortcut in Vista and Windows 7
There’s no need to do that: The Shortcut table can be used to create shortcuts in any directory. And it takes care of uninstall and rollback, which your code does not.

Rajesh Kumar
Follow me
Latest posts by Rajesh Kumar (see all)
Subscribe
Notify of
guest
0 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x