2010-01-13 35 views
1

我們的Winform應用程序由一個Main.exe和一個Launcher.exe組成。 Launcher應用程序的目的是檢查Main.exe的更新版本。爲什麼「我的」名稱空間不可用?

如果發現沒有更新它啓動使用System.Diagnostics.Process.Start

如果找到更新,它複製新MAIN.EXE到位,並啓動MAIN.EXE以同樣的方式(MAIN.EXE在這種情況下,它將成爲Main.exe的全新副本)。

這裏的的Process.Start代碼:

Dim p As New ProcessStartInfo 
p.FileName = "Main.exe" 
p.WindowStyle = ProcessWindowStyle.Normal 
Process.Start(p) 

此代碼執行是否有一直的更新,總是成功地激發了MAIN.EXE。

但是我們MAIN.EXE,如果它是在第一時間(即更新後),會報錯上引用了我的命名空間中的線,如My.Settings或My.Computer.FileSystem

運行

例如這條線將導致一個錯誤:

Msgbox(My.Computer.FileSystem.SpecialDirectories.Desktop) 

這裏的錯誤:

System.IO.DirectoryNotFoundException: Could not find special directory 'Desktop'. at Microsoft.VisualBasic.FileIO.SpecialDirectories.GetDirectoryPath(String Directory, String DirectoryNameResID) at Microsoft.VisualBasic.FileIO.SpecialDirectories.get_Desktop() at Microsoft.VisualBasic.MyServices.SpecialDirectoriesProxy.get_Desktop()

不過,雖然這個例子是指桌面記住它找不到任何的SpecialDirectories。它不限於桌面。

但只有它第一次運行(即在更新後立即)。此後它將運行良好。

如果進程失敗的更加壯觀,關於文件系統問題,鎖或線程,這將是更容易理解。但爲什麼只有這個「我的名字空間」的「小問題」?

+1

你會得到什麼錯誤? – SLaks 2010-01-13 21:03:37

+0

我向Q添加了一個示例錯誤 – hawbsl 2010-01-13 21:11:28

回答

2

我現在意識到這與複製的文件無關,一切都與一個執行不當的System.Security.Principal.WindowsImpersonationContext有關。

令人驚訝的是這些事情在發佈後5分鐘變得清晰。

相關問題