Welcome, Guest
Username Password: Remember me

Quick Launch shortcut in Vista and Windows 7
(1 viewing) (1) Guest
  • Page:
  • 1

TOPIC: Quick Launch shortcut in Vista and Windows 7

Quick Launch shortcut in Vista and Windows 7 2 years, 4 months ago #1041

  • InstallerGeek
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.
>
>      <!-- Quick Launch per-user folder -->
>      <Directory Id="QL1" SourceName="Application Data">
>        <Directory Id="QL2" Name="Microsoft">
>          <Directory Id="QL3" Name="Internet Explorer">
>            <Directory Id="QL4" Name="Quick Launch" />
>        <Directory Id="QL5" Name="User Pinned" />
>                <Directory Id="QL6" Name="TaskBar" />
>                </Directory>
>              </Directory>
>            </Directory>
>        </Directory>
>
> 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?

Re: Quick Launch shortcut in Vista and Windows 7 2 years, 4 months ago #1042

  • applicationPackaging
Tony, how do you catch the case, that your user only can install applications elevated as administrator (don&#039;t assume everybody is admin on his/her machine)? Wouldn&#039;t the quick launch shortcut then only appear on the administrator&#039;s quick launch bar and hence is invisible for the normal user(s)?

Tom

Re: Quick Launch shortcut in Vista and Windows 7 2 years, 4 months ago #1043

  • applicationPackaging
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&#039;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&#039;s another issue.

Re: Quick Launch shortcut in Vista and Windows 7 2 years, 4 months ago #1044

  • applicationPackaging
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&#039;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&#039;s ApplicationData folder via Shell API call GetSpecialFolder. I can then create shortcut links programmatically in custom action code as seen below (I don&#039;t know where I got it from, probably some MSDN article).

//-----------------------------------------------------------------------------------------
//
// CreateLink - uses the Shell&#039;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;
}

Re: Quick Launch shortcut in Vista and Windows 7 2 years, 4 months ago #1045

  • InstallerGeek
There&#039;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.
  • Page:
  • 1
Time to create page: 0.84 seconds

     
    
Home Forum