天天看點

clickonce 部署能cs程式_以管理者身份啟動ClickOnce部署的應用程式

ClickOnce方式部署應用簡單友善,估計很多人都用過,但這種方式存在一定的“缺陷”,即以管理者方式啟動應用的問題,雖然出于安全考慮可以了解,但給需要管理者權限才能正常運作的程式帶來了一定的麻煩,這導緻部分人員放棄了ClickOnce釋出。

經過查找相關資料,發現還是有辦法解決這個問題的,具體操作如下:

1、修改 manifest 檔案

經測試,如果應用程式沒有 manifest 檔案的,可以不用添加 app.manifest 檔案,ClickOnce釋出後會生成如下格式的 manifest  檔案:主程式檔案名命名.manifest (例如:Mytest.exe.manifest)

自動生成的 manifest 檔案中 requestedExecutionLevel 配置與上述一緻。

但以上不排除是個例,如果不配置此項出現異常時可考慮增加此設定。

2、修改程式主函數(即“應用程式的主入口點”,例如: Program.cs 中的 Main 函數)

usingSystem;usingSystem.Diagnostics;usingSystem.Reflection;usingSystem.Security.Principal;usingSystem.Windows.Forms;namespaceMyTest

{static classProgram

{

[STAThread]static voidMain()

{

Action run= () =>{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(newFormMain());

};

WindowsIdentity wi=WindowsIdentity.GetCurrent();bool runAsAdmin = wi != null && newWindowsPrincipal(wi).IsInRole(WindowsBuiltInRole.Administrator);if (!runAsAdmin)

{try{//不可能以管理者方式直接啟動一個 ClickOnce 部署的應用程式,是以嘗試以管理者方式啟動一個新的程序

Process.Start(new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase) { UseShellExecute = true, Verb = "runas"});

}catch(Exception ex)

{

MessageBox.Show(string.Format("以管理者方式啟動失敗,将嘗試以普通方式啟動!{0}{1}", Environment.NewLine, ex), "出錯啦!", MessageBoxButtons.OK, MessageBoxIcon.Error);

run();//以管理者方式啟動失敗,則嘗試普通方式啟動

}

Application.Exit();

}else{

run();

}

}

}

}