Squirrel.Windows icon indicating copy to clipboard operation
Squirrel.Windows copied to clipboard

Shortcut "Start in" property points to incorrect path after update

Open Slipheed opened this issue 3 years ago • 2 comments

Squirrel version(s) 2.0.1

Description I discovered this issue after many updates successfully pushed to users. After pushing an update, some users need to set "Run AS administrator" in the Desktop icon Properties/Compatibility tab. If the compatibility Tab is selected, the following message appears:

image

Upon investigation, I noticed that the Desktop icon "Start In" property points to the initial build number folder. Example: Initial build folder is "app-1.0.0", and current (i.e. the last update pushed) build folder is "app-1.1.1".

Why is the "Start in" property pointing to the initial build folder (which no longer exists)?

Steps to recreate

  1. Deploy initial App (releasify, users download and install)
  2. Update App (releasify, user receives update)
  3. User right-clicks desktop icon, selects properties, then clicks on Compatibility tab to select Run as Admin
  4. Error message appears
  5. Check "Start in" property and the path is pointing to "app-1.0.0", which no longer exist (deleted as normal process of Squirrel update)

Expected behavior The desktop icon Property "Start in" is updated when Squirrel updates the app.

Actual behavior App starts just fine, but if a user must select "Run as Administrator" in the Compatibility tab, they are presented with the error.

Additional information My App is setup per Documentation, is SquirrelAware, and the only thing I can think off is I change the the name of setup.exe to MyApp.exe. However, this is the name of the file since initial install.

Any help is greatly appreciated.

Slipheed avatar May 18 '22 13:05 Slipheed

No one helped, so I eventually figured out a work around.

Maybe this will help someone else.

I placed this code after the App loaded. The AppNumber is a string that represents the Squirrel app version folder (i.e. app-1.0.0)

            Assembly assembly = Assembly.GetExecutingAssembly();
            FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
            string version = versionInfo.FileVersion;

            if (MyApp.Version != version)
            {   
                UpdateLinks(AppNumber);
                MyApp.Version = version;
                SaveSettings();
            }

Helper Code to update the shortcuts correctly, which also sets Run As Administrator in the Advanced tab.

      public void UpdateLinks(string StartInPath)
       {

           string DesktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
           string StartMenuPath = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu);
           string AppDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

           WshShell shell = new WshShell();

           object shDesktop = (object)"Desktop";
           string daDesktopPath = (string)shell.SpecialFolders.Item(ref shDesktop) + @"\My App.lnk";
           IWshShortcut NewDesktopShortcut = (IWshShortcut)shell.CreateShortcut(daDesktopPath);
           NewDesktopShortcut.Description = "My App";
           NewDesktopShortcut.WorkingDirectory = Path.Combine(AppDataPath + @"\MyApp\" + StartInPath);
           NewDesktopShortcut.TargetPath = Path.Combine(AppDataPath + @"\MyApp\My App.exe");
           NewDesktopShortcut.IconLocation = Path.Combine(AppDataPath + @"\MyApp\app.ico");
           NewDesktopShortcut.Description = "The best app ever.";
           NewDesktopShortcut.Save();
           using (FileStream fs = new FileStream(daDesktopPath, FileMode.Open, FileAccess.ReadWrite))
           {
               fs.Seek(21, SeekOrigin.Begin);
               fs.WriteByte(0x22);
           }

           object shStartMenu = (object)"StartMenu";
           string StartMenuPath = (string)shell.SpecialFolders.Item(ref shStartMenu) + @"\My App.lnk";
           IWshShortcut NewStartMenuShortcut = (IWshShortcut)shell.CreateShortcut(StartMenuPath);
           NewStartMenuShortcut.Description = "My App";
           NewStartMenuShortcut.WorkingDirectory = Path.Combine(AppDataPath + @"\App\" + StartInPath);
           NewStartMenuShortcut.TargetPath = Path.Combine(AppDataPath + @"\MyApp\My App.exe");
           NewStartMenuShortcut.IconLocation = Path.Combine(AppDataPath + @"\MyApp\app.ico");
           NewStartMenuShortcut.Description = "The best app ever.";
           NewStartMenuShortcut.Save();

           using (FileStream fs = new FileStream(daStartMenuPath, FileMode.Open, FileAccess.ReadWrite))
           {
               fs.Seek(21, SeekOrigin.Begin);
               fs.WriteByte(0x22);
           }
       }

Slipheed avatar Jul 23 '22 08:07 Slipheed

I ran into something similar but my "Start in:" is completely garbled: ta\Local\MyApp\MyApp.exe8C:\Users\eliw00d\AppData\Local\MyApp\app-0.25

It should be: C:\Users\eliw00d\AppData\Local\MyApp\app-0.25.0

I am using Electron Forge and their Squirrel.Windows maker.

eliw00d avatar Dec 21 '22 23:12 eliw00d