2011-01-19 101 views
2

我已經在C#中開發了一個應用程序,其中包含使用註冊表(當前用戶配置單元)實現的在Windows啓動時運行的選項。當我從VS或bin文件夾運行我的應用程序時,此選項有效。ClickOnce部署的應用程序註冊表執行問題

當我創建ClickOnce安裝程序(從互聯網運行)並將其放在Codeplex上時,應用程序安裝後,此選項不起作用。沒有例外,它只是讓註冊表編寫。我想有一種安全問題。

我試着創建一個ClickOnce安裝程序,在安裝應用程序後它可以從CD /本地存儲中運行。安裝完ClickOnce Web安裝程序(放在CodePlex上)後,它不起作用。

我看着發佈設置,有設置爲默認=完全信任。我真的不知道現在要做什麼來使啓動時運行選項工作。

回答

3

創建第二個(控制檯)應用程序,它將執行寫操作,並將其添加到您原始應用程序的引用中。

當用戶啓動應用程序時,檢查是否設置了註冊表項,如果沒有運行前面提到的控制檯應用程序with elevated rights。將提示用戶輸入管理權限,寫入操作應成功。

在您的主應用程序中,您必須添加對控制檯應用程序的引用。爲了簡化程序集引用,控制檯應用程序應該至少有一個公共類,以便您可以獲取它的類型和類型assemby,因此您不必使用魔術字符串來獲取文件名。例如:

Process.Start(
     new ProcessStartInfo 
     { 
      Verb = "runas", 
      FileName = typeof(SomeClassInOtherAssembly).Assembly.Location, 
      UseShellExecute = true, 
      CreateNoWindow = true // Optional.... 
     }).WaitForExit(); 

我還發現this很好的博客文章。

+0

在Windows 7上正常工作。在Windows XP上,我被要求選擇用戶來運行控制檯應用程序,因爲我選擇當前用戶(本地管理員),並且控制檯應用程序在「無法找到運行時的版本運行這個應用程序「 – 2011-01-19 14:27:54

+0

沒有runas動詞,它在win xp上工作嗎? – m0sa 2011-01-19 14:58:07

0

你應該可以寫信給HKCU(我可以成功地做到這一點)。如果你想,回發你使用的代碼寫入註冊表的代碼,我會看看。

編輯

這個博客介紹瞭如何以編程方式讀取和註冊表寫入/。我已經使用ClickOnce部署了它,並且它工作正常。

http://robindotnet.wordpress.com/2010/05/31/enhanced-logging-in-clickonce-deployment/

您的代碼看起來不亂捶我,但你可以試試這個代碼,看看它是否工作(有在文章的結尾是在VB和C#整體解決方案)。如果確實如此,那麼代碼有問題。如果它不起作用,那麼我不知道該告訴你什麼。