2014-02-13 66 views
2

我在寫一個小型的TaskExplorer,它將所有正在運行的進程保存到.ini文件。 它在當前用戶的桌面上創建一個名爲「Überwachung」的文件夾,並以日期作爲名稱保存文件。如何將當前運行的程序集複製到Windows啓動

我希望此程序在用戶登錄後啓動,但在將當前正在運行的程序集複製到Windows啓動時,我不斷收到system.unauthorizedaccessexception

這裏是我的副本代碼:

if (!File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "ProzessManager"))) 
      File.Copy(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "ProzessManager"),false); 
     File.SetAttributes(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), FileAttributes.Normal); 
+0

你能後全部異常細節具有diferente啓動路徑比Windows Vista嗎? – devshorts

回答

2

您需要爲所有用戶

using System.IO; 
using System.Reflection; 

private string pathStartUp = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartup); 

var exe = Assembly.GetExecutingAssembly().Location; 
var destiny = Path.Combine(pathStartUp, Path.GetFileName(exe)); 
var data = File.ReadAllBytes(exe); 
File.WriteAllBytes(destiny, data); 

所以,很簡單,只是讀文件夾安裝調試並寫出主應用程序的所有字節。

編輯:改變了可變pathStartUp使用GetFolderPath,所以它的工作原理,即使在Windows XP上,/ 7/8

+0

它工作正常,感謝您的快速幫助:) – Jack

3

您必須授權您的管理員用戶應用程序。 首先添加一個新的Application Manifest File到您的項目,然後更改以下行

<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
相關問題