Okay, I have done tests for several days now...and I have downloaded the source code and debugged it
My code is rather simple, just to:1. _auBackend = new AutomaticUpdaterBackend { GUID = "some_GUID", UpdateType = UpdateType.Automatic};
2. get Client.wyc Location, and _auBackend.wyUpdateCommandline = string.Format("-cdata=\"{0}\"", _clientWycLocation);
3._auBackend.ServiceName = "EdgeAddinAutoUpdater"; (equals to the windows server name declared)
4.handle all _auBackend events (mostly logging), except: auBackend_ReadyToBeInstalled will call _auBackend.InstallNow();
5. call _auBackend.Initialize(), _auBackend.AppLoaded();
6. if (!_auBackend.ClosingForInstall){ _workingThread = new Thread(new ThreadStart(workingThread)); _workingThread.Start(); }
where the workingThread fires ForceCheckForUpdate if UpdateStep is not DownloadingUpdate, Checking and ExtractingUpdate. And it does once every 15 mins so that our clients can update anytime.
That is pretty much all the logic we have. And then, only the clients received "corrupted update" files have issue (i.e. the 3rd Step missed). If a client starts the update after we re-publish the files with proper setting, it works fine.
Thus, I think it is not about the issue in our code...
And then, first, I have found that C:\Windows\System32\config\systemprofile\AppData\Roaming\wyUpdate AUhave "some_GUID.autoupdate" and it records the UpdateStepOn, thats why ClosingForInstall is set to true because the updateStepOn is marked to be UpdateReadyToInstall and the service terminated unexpectly after it is started, so... it is forever UpdateReadyToInstall.
It super strange that even we delete the service and re-install, it still cannot be started... mind if you suggest any temp files stored in my clients' computer? (we have tried Roaming\wyUpdate AU)