you are viewing a single comment's thread
view the rest of the comments
[–] 32 points 2 years ago (3 children)

The reason you expect this is because Windows has a file lock behaviour that won’t let you delete a file when it’s in use, in Linux this limitation doesn’t exist.

Raymond Chan, arguably one of the best software engineers in the world, and a Microsoft employee, has repeatedly lamented the near malware like work arounds developers have had to invent to overcome this limitation with uninstallers.

Think about uninstalling a game. You need to run “uninstall.exe” but you don’t want uninstall.exe to exist after you’ve run it… but you can’t delete a file that’s in use. Uninstall.exe will always be in use when you run it….so how do you make it remove itself?

Schedule a task? Side load a process? Inject a process? Many ways…. But most look like malware.

Linux has never suffered this flaw.

  • source
  • parent
  • hideshow 6 child comments
  • [–] 6 points 2 years ago (1 child)

    This seems like a pretty specific use case, but also pretty common. A system function to delete the file that called it should cover that entirely, but I guess psudo-malware is acceptable?

  • source
  • parent
  • hideshow 2 child comments
  • [–] 5 points 2 years ago (1 child)

    Pseudo-malware is pretty much the way to go as a developer in my experience.

    I believe his suggestion of a javascript file that deletes itself works only works because javascript gets sandboxed and doesn't suffer from Windows "flaw" with file locks.

    https://devblogs.microsoft.com/oldnewthing/20230911-00/?p=108749

    While Raymond does offer a solution he's also completely side stepping any responsibility on Microsoft's part in creating and perpetuating this problem without offering their own native solution.

  • source
  • parent
  • hideshow 2 child comments
  • [–] 1 point 2 years ago (1 child)

    I made a Batch uninstaller (to one of my other bat scripts I think), and it could remove itself without any problem just with the command "del whateverthenamewas.bat"

  • source
  • parent
  • hideshow 2 child comments