Dotnet 命令的提升存取權限

軟體開發最佳做法會引導開發人員撰寫需要最少權限的軟體。 但是,由於作業系統規則,有些軟體 (例如效能監視工具) 會需要系統管理員權限。 下列指導會描述使用 .NET Core 撰寫這類軟體時的支援案例。

下列命令可以提升的權限來執行:

  • dotnet tool 命令,例如 dotnet tool install
  • dotnet run --no-build
  • dotnet-core-uninstall

我們不建議執行其他提升的權限命令。 特別是,我們不建議針對使用 MSBuild 的命令提升權限,例如 dotnet restoredotnet builddotnet run。 主要問題是使用者在發出 dotnet 命令後,在根及限制帳戶之間來回轉換時的權限管理問題。 您可能會發現作為限制的使用者,您無法存取由根使用者建置的檔案。 雖然有數種方法可以解決這種情況,但您從一開始其實就可以避免它們。

只要您不需要在根及限制帳戶之間來回轉換,您就可以根帳戶的身分執行命令。 例如,根據預設 Docker 容器會以根帳戶執行,因此它們便具有這種特性。

全域工具安裝

下列指示會示範針對需要提升權限才能執行的 .NET Core 工具進行安裝、執行和解除安裝時的建議方式。

安裝工具

若資料夾 %ProgramFiles%\dotnet-tools 已存在,請執行下列操作來檢查 "Users" 群組是否有寫入或修改該目錄的權限:

  • 以滑鼠右鍵按一下 %ProgramFiles%\dotnet-tools 資料夾,然後選取 [屬性]。 [通用屬性] 對話方塊隨即開啟。
  • 選取 [安全性] 索引標籤。在 [群組或使用者名稱] 下方,檢查 "Users" 群組是否有寫入或修改目錄的權限。
  • 若 "Users" 群組無法寫入或修改目錄,請在安裝工具時使用不同的目錄名稱,而非 dotnet-tools

若要安裝工具,請以提升權限的命令提示字元來執行下列命令。 它會在安裝期間建立 dotnet-tools 資料夾。

dotnet tool install PACKAGEID --tool-path "%ProgramFiles%\dotnet-tools".

執行全域工具

選項 1:搭配提升權限的命令提示字元使用完整路徑:

"%ProgramFiles%\dotnet-tools\TOOLCOMMAND"

選項 2:將新建立的資料夾新增到 %Path%。 您只需要執行此作業一次。

setx Path "%Path%;%ProgramFiles%\dotnet-tools\"

然後使用以下項目執行:

TOOLCOMMAND

解除安裝全域工具

在提升權限的命令提示字元中,鍵入下列命令:

dotnet tool uninstall PACKAGEID --tool-path "%ProgramFiles%\dotnet-tools"

本機工具

本機工具範圍會限制在每一位使用者的每個子樹狀目錄中。 以提升的權限執行時,本機工具會將受限制使用者環境共用到提升權限的環境。 在 Linux 和 macOS 中,這會導致以僅限根使用者的存取來設定檔案。 若使用者切換回限制的帳戶,使用者便無法繼續存取或寫入檔案。 因此,我們不建議將需要提升權限的工具作為本機工具安裝。 請改為使用 --tool-path 選項及先前適用於全域工具的指導方針。

開發期間的提升權限

在開發期間,您可能需要提升的存取權限來測試您的應用程式。 例如,針對 IoT 應用程式,此案例相當常見。 我們建議您在不使用提升權限的情況下建置應用程式,然後使用提升權限來執行它。 有數種模式可以進行此操作,如下所示:

  • 使用產生的可執行檔 (它可提供最佳的啟動效能):

    dotnet build
    sudo ./bin/Debug/netcoreapp3.0/APPLICATIONNAME
    
  • 搭配 —no-build 旗標使用 dotnet run 來避免產生新的二進位檔案:

    dotnet build
    sudo dotnet run --no-build
    

另請參閱