honestly the best progress bars are ones that display what is being done at that time, because if you have some knowledge and you know it's hanging on a file or task their might be something you can do to skip that one thing. such as if a program fails to run something always brakes on a file called somethingBluetooth.something perhaps the program will work if you turn off your bluetooth while it is starting up. the best thing would be multiple progress bars at each variable step, that say what each thing is being done and it is really important. because if the user can fix your program the user can actually use your program so it's one of the most important things. it is profoundly arrogant to think you have thought of absolutely everything and that the user should be powerless do anything to help your program to run.