SetUserFTA: UserChoice Hash defeated – Set File Type Associations per User or Group on Windows 8/10 and 2012/2016/2019

hey, its me again – bringing back a functionality that was removed from microsoft since Windows 2012 (or Windows 8), yay. this is not the first time that im coding a tool to recreate a missing feature that was working in older Windows versions (check my blog for volume.exe).

UPDATE 02.10.2018: Version 1.7.1 fixed false positive detections for some AV (incl. Defender)
UPDATE 23.08.2018:
Version 1.7 adds get and del parameters, comment char # for config files, EULA
UPDATE 17.06.2018:
Version 1.6 adds support for protocols (except http and https) on build 1607 and lower
UPDATE 14.12.2017:
Version 1.5 adds support for Windows 8.x and Server 2012/R2
UPDATE 10.12.2017:
Version 1.4 adds support for protocols like mailto, https, etc. (only for 1703 and up)
UPDATE 26.11.2017: Version 1.3 can now set multiple file type associations based on a config file.
UPDATE 04.11.2017: Version 1.2 completely rewritten in C to avoid AV false positives.
UPDATE 29.10.2017: Version 1.1.1 includes small changes due AV false positive detections.
UPDATE 28.10.2017: Version 1.1 can now check for Group Memberships.

SetUserFTA sets User File Type Associations per command line or script on Windows 8/10 and Server 2012/2016/2019.

ATTENTION: Windows 1803 and 1809 have an issue with file type associations after the october update. Microsoft is working on a resolution and estimates a solution will be available in late November 2018. UPDATE 06.12.2018: Microsoft has released a fix for 1803 (KB4467682) and (KB4469342) for 1809.

the story:

recently i had to fight a lot with windows file type associations. microsoft changed the way how it works drastically and it is a pain for an administrator to set or to roam FTA’s. if you followed my blog, you noticed that i already have two posts about FTA on server 2016. hopefully this one will be the last – because its the missing piece of the puzzle!

i will just quote microsoft on this issue (or feature?):

In Pre-Win 8, apps could set the default handler for a file type/protocol by manipulating the registry, this means you could easily have a script or a group policy manipulating the registry. However In Win 8, the registry changes are verified by a hash (unique per user and app)  that detects tampering by apps. In the absence of a valid hash, we ignore the default in the registry.

Microsoft offers a solution with GPO, but it is Computer-based and not User-based – and rather complicated. this means, you can not associate your Users on the same Server/Client with different file types. for example:

you have a PDF viewer and a PDF editing software on your XenApp server. Now you want that a certain group opens their PDF’s in the editor and the others only in the viewer (for licensing reasons for example). this is NOT possible anymore and Microsoft states “it is by design” and “this is a security measure”.

the hash is secret. Microsoft will not share it with you and obviously doesnt even share it with Citrix – this made me angry and angry me doesnt like a broken system. because i am into reverse engineering and security, i decided to look for the hash algorithm – and yes, i succeeded.

but ever thought about why microsoft is doing this? is it really about malware hijacking or maybe it is all about “setting our defaults and you must accept them”? why not simply display a popup where the user has to confirm an FTA change?

<TL><DR>

a filetype is protected by a hash in the user registry – for example:

HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\UserChoice\Hash

if the secret hash doesn’t match, the file type association is not being used and the system default kicks in.

SetUserFTA generates this secret hash for a supplied extension.

</TL></DR>

how to use SetUserFTA:

i made it very easy for you and the only thing you have to supply is the extension and the ProgId (optional since Version 1.1, a groupname). it works just like assoc.exe:

SetUserFTA.exe extension progid (optional:Groupname)

or

SetUserFTA.exe configfile

and since v1.7

SetUserFTA.exe get

will show all protected filetypes, just like GetUserFTA

SetUserFTA.exe del extension

will delete an association from the user registry

Example:

SetUserFTA.exe .pdf AcroExch.Document.DC

this will associate .pdf file with Acrobat Reader for the current user.

SetUserFTA.exe .pdf AcroExch.Document.DC “Adobe Acrobat Users”

this will associate .pdf files with Acrobat Reader only if the current user is member of the “Adobe Acrobat Users” group. if the group contains spaces, you must use quotes.

SetUserFTA.exe \\mydomain.local\fileshare\SetUserFTAconfig.txt

this will read all associations from the config file and set them. the file can be on a share or locally. just add every filetype on a new line like this:

.pdf, AcroExch.Document.DC, GRP_Adobe_Reader

values have to be separated by a comma. the group is optional.
using a config file, group names with spaces must not use quotes (but using SetUserFTA per command line they have to).

Note: you can supply a domain with the group name like “DOMAIN\Adobe Reader” or even in UPN format. 

a valid config file could look like this (since v1.7 you can add comments by starting a line with #):

to create such a config file, you can run “SetUserFTA get >config.txt“. since version 1.4 SetUserFTA also supports protocol handlers in the config file (mailto, https, http, etc) – but http and https will be ignored on Windows 1607. use SetDefaultBrowser instead.

you can find the ProgId’s also in the registry or with assoc.exe. the easiest way to get what you need, is to manually associate a software with a filetype and then use “SetUserFTA get” or check this registry key for the values (replace .log with your extension):

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.log\UserChoice

SetUserFTA will get the current users SID, the registry timestamp and calculates the hash. it will write it (including the ProgId and the extension) to the user registry under the subkey referenced above.

how can i deploy this?

here are some ideas (if i missed a good one, please let me know):

  • use the logon script feature in a GPO (my favorite way)
  • powershell login script in a GPO
  • a legacy bat/cmd logonscript
  • the Run or RunOnce registry key in HKEY_CURRENT_USER
  • the startup folder in the startmenu
  • any software deployment solution like SCCM
  • a scheduled task
  • GPO: User Configuration\Administrative Templates\System\Run These Programs at User Logon
  • Citrix WEM (blog post by James Kindon)
  • VMware UEM (blog post by Ivan de Mes)

its up to you. be creative 😉

IMPORTANT: SetUserFTA must run in the users context – no administrative or system privileges. sometimes the timing can be important aswell – make sure it runs after the profile of the user is loaded.

Example:

Tips:

here are some tips which can help you to find the associations that you need:

  • assoc.exe | find “.txt” – this will list the ProgId for txt files
  • ftype.exe | find “txtfile” – will list the executable associated with the ProgId txtfile
  • reg.exe query HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\UserChoice /v ProgId – gets the ProgId of the User FTA for your file extension
  • if you encounter a ProgId that looks like “Applications\uedit64.exe“, you need to deploy the corresponding entry from “HKEY_CURRENT_USER\SOFTWARE\Classes” aswell. to roam it with UPM in a Citrix environment you can use my workaround.
  • you can override HKLM associations (ProgId’s) in HKCU. for example: HKEY_CLASSES_ROOT\.vsdx can be imported to HKEY_CURRENT_USER\SOFTWARE\Classes\.vdx and then it will be prefered. if you do that, you need to roam it properly (UsrClass.dat).
  • if you still see the OpenWith dialog (especially after adding new applications: “keep using this app“) you can disable this feature with this registry key:[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Explorer]
    “NoNewAppAlert”=dword:00000001
    this registry key also works with HKEY_CURRENT_USER!
    the GPO Do not show the ‘new application installed’ notification (Windows Components, File Explorer) will only work on HKLM – but its also an option to disable this popup

F.A.Q.

where did you get the hash algorithm from?

i reverse engineered it.

does this mean you did reverse engineer windows itself to recover the algorithm?

exactly.

which tools did you use for that?

procmon, x64dbg and IDA Pro

which language have you used to code the app?

v1.0 – v1.1.1: assembly. compiled in Tasm (Borland Turbo Assembler) – i know, very oldschool.
v1.2 and up: gcc and Microsoft Macro Assembler (to create an obj file).
v1.4 is now fully coded in C/gcc
v1.7 is compiled in tcc
v1.7.1 is using gcc again, because tcc caused to many antivirus false positives

by assembler you mean machine code?

yes.

which platforms does this work on?

i have tested it on windows 8/10 and server 2012/2016/2019 up to build 1809.

is it 32bit compatible?

yes. x64 and x86 (the binary is 32bit).

can i have the source code?

no.

is unicode supported?

group names can contain unicode characters, but extensions or ProgId’s not. the “get” parameter supports unicode already.

can it also generate hashes for protocols (http, mailto, etc)?

yes, but http and https wont work on 1607 or lower. please use my SetDefaultBrowser instead.

are there any other limitations?

not at the moment. version 1.2 adds verbose output and some basic error handling.

can i break something with your app?

not really. the only thing that can go wrong are the file type associations, but it will only affect the current user and not the machine. the del parameter is destructive, but if you do something wrong, it can be fixed by using SetUserFTA again with proper parameters.

which privileges are needed to run this app?

just plain user privileges.

thats great work, can i donate somehow?

yeah – see below the paypal button.

Download

here you can download SetUserFTA v1.7.1. SHA256 hashes below.

SetUserFTA.zip:d551295c779bdb3750ddba8e781c21a3dd42a55578f818e9c789b2ba1b4dcf47
SetUserFTA.exe:791dc39f7bd059226364bb05cf5f8e1dd7ccfdaa33a1574f9dc821b2620991c2

Version 1.1 – adds support for group membership checking
Version 1.2 – is completely rewritten in C. it also offers now verbose output on errors
Version 1.3 – new funtionality: multiple file type associations with a configuration file
Version 1.4 – support for protocols like mailto, https, http, etc (only for Windows 1703 and newer)
Version 1.5 – support for Windows 8.x and Server 2012/R2
Version 1.6 – added protocols (except http and https) support on 1607 or lower builds
Version 1.7 – get and del parameters added, # char for comments in config files, EULA
Version 1.7.1 – fixes false positive antivirus detections

help to keep this project and this blog alive – consider donating:

if you prefer cryptocurrencies, please contact me for the details.

Thank you!

please report issues to bugs @ mydomain. thanks.

147 Comments

  1. Hello, thanks for your work.
    I cannot execute your exe, getting this error :

    SetUserFTA.exe is not a win32 Valid application.

    Unziping the archive also give an error (Data Error)

    • this is most likely caused by your antivirus software – this version gets a lot of false positives. i am working on a new version that will resolve that issue.

      UPDATE: try with version 1.2. its completely rewritten and should work fine now.

  2. Awesome article and this has helped me greatly. I have been able to associate PDF to Adobe reader but it does not look like I have gotten it done completely. When I double click on a PDF file I get an error saying “There was an error opening this document. this file cannot be found”. I get this 5-6 times and then it goes away. With Adobe reader open I then click file, open and choose the exact same file I just double clicked on and it opens perfectly. What am I missing?

  3. Hello,
    i am trying to do it with logo script by gpo and its not working. when i am running it from command line on the user session is it work.
    do you have any ideal what is the reason?

  4. How many hours did I spend searching for a solution before finding that tool?

    Anyway, thanks a lot, the time saved will be incredible.

    For some reason, however, the tool only works for our computers in English. I guess the “experience” string might change according to the language.

    • the string is hardcoded and cannot change. but maybe the filetype string changes? maybe this is caused by special letters (unicode characters maybe?)

      can you give me an example of something that is not working? which filetype and which progid doesnt work?

        • thats fine then. which language are you using? actually microsoft os is always english, they just use language packs, so this can not be an issue. which operating system and which build are you using?

          • I started with a script, which worked on English builds, then noticed it didn’t work on a French build. When I tried it manually, it didn’t work either.
            However, on a computer that was installed in English, then swithced to French, I don’t have any issue.

  5. I see that you have recently added support for server 2012 R2. Does this include protocols? I am specifically looking for a Mailto protocol and to associate it with Office 2013. No matter how I configure it I cannot get it to go to outlook.
    SetUserFTA.exe mailto, Outlook.URL.mailto.15 or by pointing it to a config file I pull from GetUserFTA I cannot make it point to Outlook.

    • no. protocols only work on Windows 1703 and higher. that is because in older versions you need to specify the path of the protocol app aswell. i did only implement this in SetDefaultBrowser, but never for mailto. i might create a SetMailTo in the future, when i find time for it.

      but if you want Outlook for all your users, you can of course use the AppAssoc.xml with dism and GPO to set your default mail client.

  6. I was trying to use this tool to associate file extensions in Windows 10, but invoking from InstallShield script doesn’t runs. It seems like this tool doesn’t work with SYSTEM user previliges, since InstallShield script runs the process under SYSTEM user account. At the same time, You also have stated that “just plain user privileges” are needed to run. Any remedies for this situation?

  7. Awesome tool! Is there any setting that can be made to prevent Windows from asking “How do you want to open this file?” So that the user has to tick the “alway use this app to open .xxx files” to prevent this from popping ?

    • where do you see that? which windows build and which filetype? actually my tool does exactly that – but if windows finds a new handler for a certain filetype, it might show that popup again.

      • Thank you so much for this amazing tool, after weeks of pulling my hair on how to change the file Assoc. You finally offered us the solution. I am using it with OSD on SCCM. One thing tho as mathias_k mentioned it prompt users with the “Ho do you want to open this file?” menu and has the box at the bottom “Always use this app to open” unticked. I have to mention I have ran it manually using the config.txt file on a running machine and worked fine didn’t get this pop up, but when it was part of the automated deployment the end users getting prompt with the menu I mentioned above. It’s not a big of a deal, just wanted to let you know about this behavior and thanks again for the amazing tool.

          • The windows version is Windows 10 1709, and it only did that with the .pdf extension, but worked fine when I assigned the .html to chrome and I didn’t get the prompt. However I have found a work around the issue and created this .reg file that disabled this “How do you want open this file” menu.

            [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Explorer]
            “NoNewAppAlert”=dword:00000001

            adding this key with your tool is all I needed to finish off my project. Thanks again :).

  8. Really nice work.
    And I can at least partly understand why you do not want to release the source code. On the other hand, that unfortunately means I cannot make use of it, since I have some responsibilities towards my employer and my users.

    • i dont really understand your concern. windows is a closed-source OS and most of the applications on it as well. i have very well documented my work and its completely clean on virustotal. SetUserFTA has been downloaded multiple-thousand times and it has a very good reputation.

      in my eyes an administrator has a responsibility yeah – bringing the best possible user experience to the users – and that is what my tools do 🙂

  9. WinServer 2016, 1607 not working
    SetUserFTA.exe mailto, Outlook.URL.mailto.15
    error: protocols are not supported on Windows 1607 and Windows 8/Server 2012

  10. I have a strange behavior with this tool.
    First of all i tried to set filetype .pdfxml / .acrobatsecruitysettings and that does not work. It will be ignored. Maybe filetype to long?

    The second one is. I used an Configfile to get .pdf registered. It will be run as a task on logon of the user. Everything is fine. Reader is associated and opens fine. Then a gpupdate runs after some time and .pdf is reverted to Microsoft Edge.
    Do you have a clue why?
    We do not set the filetype elsewhere. This is on 1709 (16299.492).

    • the size of the extensions is max 255 chars, therefore it cant be too long. can you check with GetUserFTA if the entry is written? or manually in the registry under HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.extension -> here should be a UserChoice key and the hash should change every time when you run SetUserFTA.

      when gpupdate changes a extension, there must be something in a policy. are you sure you dont have the “Configuration\Policies\Administrative Templates\Windows Components\File Explorer\Set a default associations configuration file” configured in a gpo?

      • Sorry my fault, it was the application\Acrord32.exe for both extensions. They are not very important so this does not matter. Currently it is to much work to put in all classes into each user.

        The second one: We do not set default app association via GPO. I have exported and imported them with dism once and only on my computer. Maybe there is some sort of Problem.

        Prior to this i deleted OEMDefaultAssociations.xml
        I opened CMD

        assoc | findstr “.pdf” Output: .pdf=AcroExch.Document.DC
        GetUserFTA Output: .pdf, AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723

        Then run: SetUserFTA .pdf AcroExch.Document.DC

        Assoc | findstr “.pdf” Output: .pdf=AcroExch.Document.DC
        GetUserFTA Output: .pdf, AcroExch.Document.DC

        Run gpupdate

        Assoc | findstr “.pdf” Output: .pdf=AcroExch.Document.DC
        GetUserFTA Output: .pdf, AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723

        I will check that on a clean system.

  11. Great tool, Christoph. You really did a great job! I knew about the hash issue as I monitor registry changes before I try to reproduce them using scripts or batch-files. But I never thought that I would find a tool that can compute this hash.

    A few remarks and questions: (Windows 10 Pro en-us 1803)

    1) Regarding the config.txt file, I had to save it in ANSI to be able to use it. Otherwise I am getting an error message about a comma.

    2) I use many portable apps (in folders on my HDD) – also video/music players.
    So, I used SetUserFTA with a config.txt to associate over 100 extensions with ‘Applications\VLCportable.exe’. After that – as a test – I did the same with ‘Applications\SMPlayerPortable.exe’. And then again with ‘Applications\VLCportable.exe’.

    But the ProgID ‘Applications\VLCportable.exe’ had been deleted!? How come?
    I had to associate one video extension with VLCportable manually once again and then it worked again.

    3) In your ‘tips’ it reads:
    QUOTE
    if you encounter a ProgId that looks like “Applications\uedit64.exe“, you need to deploy the corresponding entry from “HKEY_CURRENT_USER\SOFTWARE\Classes” as well.
    UNQUOTE
    This would apply to ‘Applications\VLCportable’, too. Can you please explain what exactly you mean here. For me there was no need to write anything else to the config.txt. but this
    .3ga, Applications\VLCportable.exe
    .669, Applications\VLCportable.exe
    .a52, Applications\VLCportable.exe

    4) Can you tell me the minimum requirements needed, to add e.g. a video player to the list to choose from in ‘Windows Default Apps’ settings? In the selection window for videos you would normally find only these:
    – Movies & TV
    – Photos
    – Windows Media Player
    – Look for an app in the Store

    However, after I associated over 100 extension with VLCportable, I could find VLCportable there, too. How come?

    Hope, these were not too many questions 🙂
    Regards
    Stefan

    • sorry for the late response, i was quite busy – that are a lot of questions… let me try to answer them all 🙂

      – you are right about ansi. i never tried a different format and never had a request for it. unicode strings are not supported atm, but maybe i can address that in a future update
      – i dont know why Applications\VLCportable.exe was deleted. SetUserFTA does only create the UserChoice keys and nothing else. all other registry keys must exist or be created before to have a proper association
      – my note about HKEY_CURRENT_USER\SOFTWARE\Classes means exactly that. you must pre-create the key if you automate something with SetUserFTA. it has nothing to do with the config file from SetUserFTA at all
      – i never analyzed what exactly is needed to show a program in the openwith dialog, because i dont even want to use it at all. users should not see that dialog at all in the best case and if all registry keys for a file associations match, you can avoid exactly that with SetUserFTA – but ill have a look. that is an interesting question 🙂

      • Thought I would receive an email notification about the approval of my comment and/or any answers or comments. That’s why it took me so long to realize that you already answered…

        Now, thanks a lot for taking the time to answer my questions 🙂

        Regarding the ANSI issue, this isn’t really a problem, but the user needs to know that it has to be ANSI. The error message doesn’t give you a clue what’s wrong. So, it might make sense to add a hint to the error message text.

        But as far as I am concerned, now I know it 🙂

        Thanks again and best regards,
        Stefan

      • Email Notification:

        Yes, now notification works 🙂
        Thanks!

        However, you cannot send a reply to the sender mail address. That’s why I’m answering here.

  12. Mostly true, but you added some made up items. Why?

    “this includes a funny detail – regdate is the timestamp of the UserChoice key in the registry. i didn’t even know that registry keys have timestamps and as soon you modify the key, it will change the timestamp and the hash is not correct anymore.”
    Easily disprovable, given that the hash code is the same regardless of when the key and value are created.

    “experience = “a microsoft secret string”; a static string (this is a dummy example, not the real string)”
    No. Not part of the hash generation algorithm.

  13. Interesting tool! But when i download this, Norman Virus Control gives an malware warning (Trojan.Heur.FU.dm0@aK5Dkooi) on the SetUserFTA.exe file. (How) can i safely use this?

  14. HI and thanks for a great tool!

    Will there be added support for protocols? (http and https)

    Do you have any tip on how to best handle these in the best way. Per user, not per machine.

    Regards
    Fredrik

      • Hi and thanks for your quick reply.
        I have now managed to achieve what I wanted by using a combination of SetDefaultBrowser and SetUserFTA.

        I wanted the user to choose what Browser to be Default (IE vs Chrome), and that the browser choice settings will be kept at next login. 2016 Terminal Servers with Roaming Profiles.

        I made a small app in PS where users can choose their default browser. This app run both your tools and also writes a Value to the HKCU in registry.

        In GPO I have set Item-level targeting which looks for this registry value, and applies the correct browser with in a login script with your tools.

        Seems to work perfect!

        Thanks again 🙂

  15. Hi Christoph, thank you for this nice tool! We have an issue with setting the file association for .XML. When we apply a config file, the associations for all other file extensions work except the XML that we try to associate with Excel. (.xml, Applications\EXCEL.EXE). If we associate .xml to Excel manually once and then for example assign it to Notepad, and then run SetUserFTA.exe again with the same config file it works. Can you explain this behavior? We have no policies that force xml associations what so ever. Hope to hear from you.
    Ronald

  16. Hi, I’ve followed your documentation; I have a piece of software that uses a .dtd extension, I have added the reg key to HKCU/Software/Classes but running the SetUserFTA doesn’t appear to set the application that I want. It does however set Adobe Reader for .pdf under the same login script.

    Is there any form of logging available so I can see where it is going wrong?

    • you can use “SetUserFTA.exe get” to see which associations are set for the current user. if there is something wrong, you can use “SetUserFTA.exe del” to remove an association.

      if you are not sure what you exactly need, you can associate a filetype manually and then use “SetUserFTA.exe get” to see what windows changed. the easiest way to do that is just a right click on a file and select “open with, always use this app”. hope this helps.

      • That’s exactly what I did; set it manually and then ran the ‘SetUserFTA.exe get’ of which I get an entry like Applications\2ddes.exe. I’m not sure why it’s not applying all the associations I’ve set, it seems to do some such a .PDF but not this one or VLC for .mp4

          • Assume you mean HKCU/Software/Classes? I have that key applied on login before running SetUserFTA. Very odd. It seems HKEY_Classes_Root seems to be taking precendence still.

          • yeah sorry, it is HKEY_CURRENT_USER\Software\Classes\Applications. did you run a procmon to see if there is a key missing? also check if you have the file extension under HKEY_CURRENT_USER\Software\Classes too – this will override the file extension from HKEY_CLASSES_ROOT.

  17. hi, i have reverse the hash algorithm too.MS call it some CS64??
    but,in 17134(maybe later)?
    file type Associations reg has be protect ACL
    can not SetValue/delete value Hash or ProgId
    so have any solution fix it in r3?

  18. Thanks,This is a VERY useful tool, Microsoft are trying too hard to push their shitty browser (EDGE) and this is getting scary.. What will they do Next ? I may not be surprised if one day they decide to uninstall other web browsers (for security or another stupid reason like that).

  19. Virus false positives:

    VirusTotal
    URL: http://kolbi.cz/SetUserFTA.zip
    Erkennungsrate: 3 / 67
    Analyse-Datum: 2018-11-07 09:52:24 UTC ( vor 0 Minuten )
    Datei-Scan: Zu der Analyse der heruntergeladenen Datei wechseln
    0 0
    Analyse
    Zusätzliche Informationen
    Kommentare
    Bewertungen
    URL-Scanner Ergebnis
    Sophos AV Malicious site
    Avira (no cloud) Malware site
    Kaspersky Malware site
    ADMINUSLabs Clean site
    AegisLab WebGuard Clean site

  20. Hello. I discovered your software a little while ago, precisely because I started to be interested in the way Windows generated “Hash”. I am bad, if not horrible in reverse enginnering.
    After 3 days, I think I have found some good leads.
    I come here not to find answers but simply for you to tell me if I am on the right path 😉

    So, I will remain discreet but if I tell you: 01d477aa???????? and “ComputeHashFromString” it tells you something ? (A simple yes will be enough for me;))

    Please, excuse me for my poor English.

    • this depends in which shell component you are looking i think. ive seen some strings about function names, but not the one you mentioned. but i think i know what this hex means 🙂

  21. Hi Christoph,
    Just encountered a new problem:
    I Installed Windows 10 1803 on Nov. 1 on a new test machine, and I cannot assign any “non-windows” program to files that are by default opened with a Windows app, e.g. videos or pictures or a pdf…

    Cannot do it via the context menu (it accepts my new association – e.g. *.pdf to PDFXchangeViewer.exe -, but the file is still being opened with the Windows default app Microsoft Edge).

    Same happens when I use SetUserFTA.exe which works perfectly on other installations as reported earlier.
    Any idea?
    Thanks and regards,
    Stefan

  22. Hi.

    One, maybe stupid question. If I run “.\SetUserFTA.exe > .\config.txt” and then (without any changes in the config file) .\SetUserFTA.exe .\config.txt, I’ll get the following error: “error: progid empty. check your file contents – separator is ,”
    The content in the file looks like your example:
    .3g2, AppX6eg8h5sxqq90pv53845wmnbewywdqq5h
    .3gp, AppX6eg8h5sxqq90pv53845wmnbewywdqq5h
    .3gp2, AppX6eg8h5sxqq90pv53845wmnbewywdqq5h
    .3gpp, AppX6eg8h5sxqq90pv53845wmnbewywdqq5h
    .3mf, AppXr0rz9yckydawgnrx5df1t9s57ne60yhn
    .aac, AppXqj98qxeaynz6dv4459ayz6bnqxbyaqcs
    .ac3, AppXqj98qxeaynz6dv4459ayz6bnqxbyaqcs
    .acrobatsecuritysettings, Applications\AcroRd32.exe
    .adt, AppXqj98qxeaynz6dv4459ayz6bnqxbyaqcs
    .adts, AppXqj98qxeaynz6dv4459ayz6bnqxbyaqcs
    .amr, AppXqj98qxeaynz6dv4459ayz6bnqxbyaqcs
    .arv, arv.config
    .arw, AppX43hnxtbyyps62jhe9sqpdzxn1790zetc
    .asf, AppX6eg8h5sxqq90pv53845wmnbewywdqq5h
    .avi, AppX6eg8h5sxqq90pv53845wmnbewywdqq5h
    .bmp, AppX43hnxtbyyps62jhe9sqpdzxn1790zetc
    .config, Applications\NOTEPAD.EXE
    .cr2, AppX43hnxtbyyps62jhe9sqpdzxn1790zetc
    ….
    Whats wrong??

    Thx Kai

    • the fastest way is to associate it manually (right click a file and select open with, always open with) and then run “SetUserFTA.exe get” – then you will see which ProdId was used.

  23. Hello! We are using SetUserFTA to set PDF associations to Adobe Reader and Adobe Acrobat Pro depending on AD group membership. It works very well, BUT.. Some of the users that has been set to Adobe Acrobat Pro get changed to Adobe Reader during the day in the middle of a session. I have not found any logic in when this happens. We have remove Adobe Acrobat Pro from HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications\ to prevent “Open With..” for users that not has access. Could that be the cause?

    Do you got any tip what can cause this?

    • maybe the plugin in the browser? you can also use applocker or NTFS permissions to disable acrobat32.exe completely for these users – then you maybe also find out when it gets triggered, because it will give an error.

  24. you must escape these characters. those are operators in cmd and you must escape them with ^ to use them as a string.

    actually i tried to reproduce your issue and following worked:
    password=My “Pass

    unrar x -p”My “”Pass” protected.rar

    just use double quotes where the password includes a quote. if it contains a space, you must quote the whole password.

  25. Well that was dumb. I just needed to log the user off and back on. Forgot that that is necessary after adding a user to a new AD group.

    But I’m facing another issue, this time with setting Notepad++.exe as the default program for .txt files. Here is my command that I’m running on the server (server 2016), in command prompt, as the user:

    SetUserFTA.exe .txt Applications\notepad++.exe

    Nothing happens when I run this command. I checked the registry and verified that “Applications\notepad++.exe” is the correct ProgId when using Notepad++.exe. Has anyone else faced this issue with Notepad++ or something similar?

        • It’s not a new profile. I’m trying to set it on my own admin profile and I’ve logged into the server hundreds of times. Wondering if it’s an issue setting programs with a progid of Applications\program”

          • i have just tested this on Server 2019 and it works with Applications\notepad++.exe – can you give me more information? which Windows build? which extension? are you running it in powershell or cmd? you need this key HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe with proper content to get it working.

  26. I just wanted to use this for my deployments but the config file does not work no matter what I try.

    Tested with powershell and CMD like mentioned above.

    In my txt file is only one simple line for setting adobe reader as default pdf reader:
    .pdf, AcroExch.Document.DC

    I use setuserfta.exe testconfig.txt

    The error I get is:
    error: progid empty. check your file contentc – seperator is ,

    Any hints would be great!

  27. Hello.
    I’ve succesfully deployed Your resolution in our envoirment using autostart script and copied fta folder containing nessesary files on each computer. I have a problem. Set fta works on windows 7 machines no problem, but on windows 10 it doesen’t change default pdf viewer. I checked registry – everything looks good – key is with good value in HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice but Windows 10 keeps Edge as the default pdf viewer (I’m trying to set it to Foxit – so my key ProgId value is is FoxitReader.Document). Any thoughts?

      • it adds registry key when i run it manually, it even refreshes the desktop – but when i go to control panel –> default programs –> associate program by file types it reads under .pdf EDGE. As I wrote it works well on win7 on about 200 computers :). Still no luck on Win 10. Windows 10 are up to date. Maybe some update cracked it?

          • Yes. Then when i change it and run get from setuserfta.exe i end up in having .pdf, pdf_auto_file. I will test some more tomorrow. Any additional suggestions will be appreciated.

          • ah i see. then Foxit does not register a proper progid and thats why SetUserFTA does not work. you can also export the pdf_auto_file registry keys (probably from here HKEY_CURRENT_USER\Software\Classes) and import them before you run SetUserFTA and use it with .pdf pdf_auto_file then.

          • I’ve tried exporting pdf_auto_file from clesses. the exported registry is:
            Windows Registry Editor Version 5.00
            [HKEY_CURRENT_USER\Software\Classes\pdf_auto_file]
            [HKEY_CURRENT_USER\Software\Classes\pdf_auto_file\shell]
            [HKEY_CURRENT_USER\Software\Classes\pdf_auto_file\shell\open]
            [HKEY_CURRENT_USER\Software\Classes\pdf_auto_file\shell\open\command]
            @=”\”C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\FoxitReader.exe\” \”%1\””
            when i then run command SetUserFTA.exe .pdf, pdf_auto_file
            it still doesent change pdf viewer in windows and my get output is:
            .pdf, AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723
            .pdf,, pdf_auto_file

          • there is a double comma in your output. maybe you had a type when running SetUserFTA? looks like you ran SetUserFTA .pdf, pdf_auto_file – notice the extra comma.

          • Yes. I can see that however i put setuserfta.exe .pdf, pdf_auto_file manually so theres no mistake in command. I think Windows some kind of automaticlly adds the second comma.

          • how do you mean manually? this command is wrong: setuserfta.exe .pdf, pdf_auto_file

            setuserfta.exe .pdf pdf_auto_file is correct

          • Ah You got me:) So this was a mistake. I’ve had some problems with network share also for a while, so i tried to test it manually and then a comma went in. Sorry for trouble and many thanks for pointing this for me. Cheers.

  28. you just have to add /R after for and it will loop through all directories:

    FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

    Walks the directory tree rooted at [drive:]path, executing the FOR
    statement in each directory of the tree. If no directory
    specification is specified after /R then the current directory is
    assumed. If set is just a single period (.) character then it
    will just enumerate the directory tree.

    • Hi Christoph,
      Thanks a lot, but it is a bit more complicated.
      I actually want to create copies where all files from the source folder structure will be copied to the same (already existing) folder structure on the target drive:

      Simplified example:

      d:\Test\file1.txt
      d:\Test\subfolder-A\file2.txt
      d:\Test\subfolder-B\file3.txt
      d:\Test\subfolder-B\file4.txt

      to be copied to

      e:\Test\file1.txt
      e:\Test\subfolder-A\file2.txt
      e:\Test\subfolder-B\file3.txt
      e:\Test\subfolder-B\file4.txt

      There are many tools and programs that can do this. But I need “stream copies”. So, I use cs.exe which produces stream copies (e.g. a sparse file will be copied as a sparse file)
      Furthermore, cs.exe also copies all time stamps, even the original creation date.

      That’s why I would like to have my below batch file modified which does the above, copy each file to the folder it belongs in.

      For %%F In (“c:\From\*.*”) Do If Not Exist “d:\To\%%~nxF” cs “%%F” “d:\To\%%~nxF”

      Can you help?
      I would appreciate this very much!
      Thanks and best regards,

      Stefan

  29. Christoph:
    I have been attempting to use your setuserfta to reset the telephony protocols in a clean W10 1803. Running from cli it works fine for all fta and protocols except tel. Has anyone else come across this? Does tel protocol use openwith differently from other protocols? setuserfta creates the userchoice entry under tel correctly with a hash, but subsequent attempts to call the tel protocol seem to think the hash is not valid – evidenced by the fact that it asks to open Pick an app when tel is triggered. setuserfta works fine with callto and even will make skype protocol work with other telephony apps. Any advice would be appreciated.

    • you are the first person asking about this protocol, therefore i cant really answer your questions. but what exactly happens? is the hash being deleted or do you get a popup asking to select an app?

          • The hash stays – does not get deleted. Further testing: setuserfta works properly for the selections that show in the Pick an app menu. Using ChromeHTML or People (AppXvvr0sjtc34r6nk4mhn2e608s2xp2tezg) – the User choice is added correctly to: Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\tel\UserChoice

            and the UserChoice uses the selection as though it was previously chosen by the Pick an app selection. When we try to change it to an app that is not on the Pick an App list – setuserfta creates the User Choice key and its subkeys – hash and progid or changes them if they already exist – but the selection won’t work. The popup goes back to it’s initial selection state asking to open Pick an App as if the hash is rejected or the userchoice key does not exist. Our app is registered and shows in selection for Openwith on other apps – it appears that the selections for Pick an app are registered differently for tel from other selections. When we use setuserfta to set the alternative program (TcDial) UserChoice for callto or skype it works as expected: setting the TcDial program as the userchoice for callto and skype are part of the selections operating correctly when triggered. I am also trying to find a way to set TcDial as a selection in the Pick an app for tel but it appears that there is something that is special that is required for this to occur. Any thoughts on setting the tel selection apps would be appreciated.

          • did you try this registry key (restart of explorer required)

            [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Explorer]
            “NoNewAppAlert”=dword:00000001

            if you manually assign your app, does that work properly? when the hash stays, it is correct. windows removes invalid hashes and also writes to the eventlog – can you check if it does that? its in Microsoft, Windows, Shell, Core/AppDefaults.

  30. Hello,
    Thanks for such nice tools like SetUserFTA, GetFTa. My requirement is a bit different than that, can you please help me out.
    I have a custom App, where any AD user logs in and if he opens Outlook through the app, his mailbox is loaded. The problem I am facing is: If there is a PDF attachment, then it tries to open in MS Edge but fails. B’coz edge downloads the pdf file in windows user folder and the person logged in our app doesn’t have access to it. I tried making Adobe as the default thru Settings, GPO, Registry, etc but somehow microsoft doesn’t honor any of these and makes the pdf open in Edge only.
    NOTE: Here the user logged in Windows is different than the user logged in the app. If the user logged in Windows logs in the app, then things work fine. But in most cases, both users would be different.
    Trying different things, recently I wrote a PowerScript that creates Windows User Profile for the user logged in the app. Using SetUserFTA, I set the file association for PDF; but I believe that sets for Current User.

    Can you please suggest, what and how can I make ADobe as default PDF Viewer for all users. I think, Win uses the Default user properties for the user logged in the app !! Not sure. Have tried several things in several ways; nothing works. Can you please help me out and suggest what would be the best solution to overcome this issue.

    Thanks a lot,

    T.

      • Thanks for your response.
        I had tried changing the file associations on GPO at AD level, but didn’t work. I learned those settings are user (windows user) based and not system based.
        The scenario is, user “userWin” is logged in windows, and in app a new user name “userRemote” is logged in who might not have any windows profile on the system. Outlook and other apps from the application are opened as “userRemote” on the system. As “userRemote” doesn’t have any Win profile, Windows is taking kind of Default User settings for “userRemote”; which enforces to use MS Edge to open PDF file. I need a way to override to set something that will make settings for “userRemote”. Do you think the link shared by you, will help overcome this scenario ?

        Thank You,

        • And yes, the current user for windows is “userWin” (as he is logged in Windows), but need to apply file association settings for “userRemote” that is logged in my application (may not have any windows profile) and the apps that are opened from my app are opened as “userRemote” and not “userWin”. So, HKCU settings also don’t work here as CU is “userWin” and not “userRemote”.

          • did you try to open a cmd with “run as other user” and then use SetDefaultBrowser with the userRemote? sadly you must run it once per user. you can not export/import registry keys. Microsoft blocked that possibility.

        • its actually exactly the other way around. the GPO applies to the machine and NOT the user. that is the reason why i developed SetDefaultBrowser to allow settings per user.

          every user on a windows system has a profile in the end. you can check that by looking at C:\Users

          if you use the Microsoft official way from my link this should work (a reboot might be needed) – but you could also run SetDefaultBrowser as the userWin AND userRemote. this should work too on the same machine.

          • Thanks a lot.
            This helped me greatly resolve the issue. Now I can set the file association from my custom app directly.
            Thanks Once again.

  31. Christoph Kolbicz, God bless you sir! I am preparing to deploy Windows 10 1803 to our users and I could not figure out how to force the .pdf extension to be controlled by Acrobat. I used your SetUserFTA along with a simple batch file to be deployed via SCCM as the user and it works perfectly. Thank you so much!

6 Trackbacks / Pingbacks

  1. SetUserFTA - Set per-user file type associations in Windows 10
  2. Dateiendungen automatisiert unter Windows 10 mit den gewünschten Applikationen verknüpfen ← Gunnar Haslinger
  3. Group Policy Objects – VDA User Settings – Carl Stalhood
  4. Workspace Environment Management 4.5 – Carl Stalhood
  5. How to programmatically configure file associations in Windows 10 and Server 2016 without DISM - Jose Espitia
  6. Edge hijacking .pdf associations – My Site

Leave a Reply