I agree with Vitaly Mijiritsky's answer: https://ux.stackexchange.com/a/120380/98561
And let me tell you a short story from my own experience of developing a medical application.
The very early step of the user story was to start a study by entering some details like study ID, patient's name, birth date, type of study, etc. In fact, only study ID was mandatory and had to be unique. A small dialog was used with input fields, OK and Cancel buttons. All enabled.
Once the user filled in the fields and hit OK, the checking begun whether study ID is entered and is unique. Should that not be the case, a suitable message box was displayed (an info box, only OK button) and the user got another chance. The more chances they used the more annoyed they were. I lost count of the complaints.
In the second iteration this is what was changed:
- study ID was checked while entering and suitable balloon was displayed if the name was too short or not unique.
- OK button was disabled with suitable balloon (on hover) explaining the status.
The observation was that the users did play "hide and seek" (thus finding out when the OK button gets enabled) before asking any questions about this dialog. And slightly any questions were asked.
To sum it up and answer your question - go for:
disable the button and show a message balloon when the user hovers over the button
This solution:
- saves the user unnecessary clicks
- intrigues the user in positive way (finding when the button gets enabled) rather than disappoints that something was wrong after clicking
- shows the status and the progress in some way