我正在研究一些具有自動更新功能的應用程序。實現的想法很簡單,如下所示:
- 有一些「啓動器」應用程序安裝到「Program Files/whatever/...」。這是打算由用戶啓動的應用程序。
- 每次執行「啓動器」應用程序時,它都會檢查服務器的更新並將其下載到「%APPDATA%/ some/...」。然後它從該文件夾啓動一些應用程序。如何診斷和修復dotnet應用程序的這種「現場」崩潰?
上述方法正在我的開發機器(運行Vista)和XP下的其他一些機器上工作,但在一些不同的機器(運行Windows 7)下它不工作。當「啓動器」執行真正的應用程序時,它會崩潰並出現一些未知問題(Signature = System.UnauthorizedAccess)。當從%APPDATA%/ some /文件夾手動執行實際應用程序時,一切工作正常。我試圖在ProcessStartInfo中設置相同的工作目錄,因此「starter」也會在該文件夾中執行真正的應用程序,但這對我沒有幫助。
如何診斷和/或解決該問題?
更新
更多關於如何我運行的主進程的詳細信息,從首發:
private static readonly string _ROOT = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MyApp");
...
private static void Run()
{
string startPath = Path.Combine(_ROOT, "MyApp.exe");
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = startPath;
startInfo.WorkingDirectory = _ROOT;
Process.Start(startPath);
}
這無疑啓動了正確的過程,因爲應用程序窗口中可以看到,但有些磁盤或網絡操作可能被Windows拒絕並且啓動過程崩潰。
更新
該跟蹤顯示工作目錄不正確,並指出我的代碼中不正確的Process.Start(字符串)方法調用。正確的行:
Process.Start(startInfo);
創建與有限的權限你的盒子另一個帳戶。查看當權限有限的帳戶在Program Files中試圖搞砸時會發生什麼情況。 – overslacked 2010-06-14 19:28:34