2016-03-16 42 views
0

我已經創建了Installshield 2015(Installscript),它將.NET應用程序安裝到安裝目錄中。Installshield:調用icacls來更改特殊文件夾的寫入權限

.NET應用程序依賴於SQL CE 4.0數據庫。

安裝過程在管理員或本地管理員帳戶下運行。

在Installshield項目中,我將清空的SQL CE 4.0數據庫.sdf文件放入[CommonAppDataFolder]中。

的Windows Vista(或更高版本):安裝過程中會在以下位置的數據庫複製C:\ ProgramData \ MyCompany的\ MYAPP \ database.sdf

在安裝過程結束時,MSI將調用一個批處理文件來設置寫權限這樣的「用戶」組(因爲創建在commonAppData文件夾中的文件時,所採取的所有權):

icacls C:\ProgramData\MYCOMPANY /T /grant *S-1-5-32-545:W 

該應用程序將下一個標準的用戶處理來執行(未升高的由UAC提供),以便通過「用戶」組的成員連接和寫入壓縮數據庫。

我想知道是否允許我在不爲IT管理員創建安全漏洞的情況下執行'icacls'命令,以及是否必須考慮其他組SID?

預先感謝您的回覆,

+0

旁邊的問題(在你弄清楚這是否是個好主意之後):你是否考慮過使用SetObjectPermissions來避免對icacls進行shell化? –

+0

完全沒有,我會考慮使用它,因爲它看起來像使用installscript處理ACL分配的更優雅的方式。 – user4953001

回答

0

這是可以接受的運行ICACLS上的文件夾命令,你的安裝過程中創建&文件。在任何其他文件夾上這樣做被認爲是安全漏洞(並且一些防禦軟件能夠檢測並防止它)。但是,至少在企業環境中,除非有很好的理由(例如,您的安裝自己創建的用戶或組),否則我會建議不要使用硬編碼的SID。
相反,安裝程序應該提供一個對話框,允許指定應用權限的用戶和/或組(本地應用程序和適用的域應用程序)(有效地,可以運行應用程序的用戶)。
您可以使用SdLogonUserBrowse()函數實現此目的。

+0

謝謝,我將嘗試實現此對話框並存儲用戶/組選擇,然後將SetObjectPermissions應用於選擇的每個項目。我會回來標記這是一個答案。總的來說,如果我可以通過編寫一個installscript代碼塊而不是Dos批處理文件來管理ACL權限,那麼最好。親切的問候, – user4953001

+0

幾乎在那裏! SdLogonUserBrowse對話框在安裝過程中被調用,但是在點擊瀏覽按鈕後,彈出窗口顯示「ISNetApiRT.dll沒有加載,或者在加載dll時出錯,這個dll需要加載才能執行此操作,請確認dll是在SUPPORTDIR目錄中「。 – user4953001

+0

正確!我完全忘了它。您應該將其添加到項目中的「支持文件\語言無關」部分(在「巴頓與邏輯」下)。從C:\ Program Files(x86)\ InstallShield \ 2015 \ Redist \ Compressed Files \ Language Independent \ Intel 32 \ ISNetApiRT複製它。dll – yossiz74