日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[转]获取Setup文件的运行路径

發(fā)布時(shí)間:2025/6/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]获取Setup文件的运行路径 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
昨天項(xiàng)目中因?yàn)樾枰诎惭b時(shí)做配置,而在打包之前是不知道配置的具體信息的。用InstallShield來(lái)做打包好像做這樣的處理比較方便,但是使用Visual Studio創(chuàng)建安裝項(xiàng)目來(lái)打包時(shí)好像不是那么容易,在網(wǎng)上查找相關(guān)的資料一直沒(méi)有找到很好的方法來(lái)直接獲取其運(yùn)行路徑,網(wǎng)上有人說(shuō)繼承Installer來(lái)做,但是無(wú)論如何所能取得的路徑是系統(tǒng)msiexec.exe的運(yùn)行路徑,所以這種方法看起來(lái)是行不通了。獲取其安裝路徑也是非常簡(jiǎn)單而且方法有很多種。
??? 想到以前在做項(xiàng)目時(shí)要求程序只能有一個(gè)運(yùn)行實(shí)例,這種方法來(lái)處理豈不是很好,換種思路來(lái)處理:先取得當(dāng)前運(yùn)行的所有Process然后再找到那個(gè)Setup或是*.msi那不就好了。想到著就趕快動(dòng)手試驗(yàn),在程序中加上處理代碼,很快搞定。
Process[]?processes?=?Process.GetProcesses();
????????????
string?tmp?=?"";
????????????
int?i?=?0;//調(diào)試時(shí)為了查找線(xiàn)程的個(gè)數(shù)
????????????foreach?(Process?pro?in?processes)
????????????
{
????????????????
//MSI?Title即為你的打包文件在運(yùn)行時(shí)顯示的標(biāo)題
????????????????if?(pro.ProcessName.ToLower()?==?"msiexec"?&&?pro.MainWindowTitle?==?"MSI?Title")
????????????????
{
????????????????????
//這里在Vista下測(cè)試時(shí)因?yàn)橐x寫(xiě)文件(由于Vista使用了UAC來(lái)增強(qiáng)安全性,
????????????????????
//要求必須以管理員身份運(yùn)行,而直接運(yùn)行msi文件只能以普通權(quán)限來(lái)運(yùn)行),
????????????????????
//所以不讓用戶(hù)直接運(yùn)行MSI文件,而要求必須從Setup.exe文件運(yùn)行,
????????????????????
//如果你不需要在Vista下使用則不用如此處理
????????????????????MessageBox.Show("Please?run?setup.exe",?"ERROR",?MessageBoxButtons.OK,?MessageBoxIcon.Error);
????????????????????
throw?new?InstallException("run");
????????????????}

????????????????
else?if?(pro.ProcessName.ToLower().IndexOf("setup")?&&?pro.MainWindowTitle?==?"MSI?Title")
????????????????
{//判斷ProcessName是否是setup,并且其MainWindowTitle為你的安裝文件的Title
????????????????????tmp?=?tmp?+?pro.Id?+?""?+?pro.ProcessName?+?Environment.NewLine;
????????????????????tmp?
=?tmp?+?"?"?+?i.ToString()?+?"="?+?pro.MainModule.FileName?+?Environment.NewLine;//pro.MainModule.FileName即為Setup的完整運(yùn)行路徑
????????????????????tmp?=?tmp?+?"?"?+?i.ToString()?+?"="?+?pro.MainWindowTitle?+?Environment.NewLine;

????????????????}
????????????????
????????????}

????????????MessageBox.Show(tmp);

不過(guò)此方法有點(diǎn)不妥之處,那就是如果用戶(hù)改變了Setup.exe或是*.msi的文件名就不好處理了,為了防止在用戶(hù)更改文件名后運(yùn)行安裝,你可以在程序中加上判斷文件名更改的處理,給用戶(hù)提示。

總結(jié)

以上是生活随笔為你收集整理的[转]获取Setup文件的运行路径的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。