Jetpack Compose for Desktop:Windows下如何让exe以管理员身份启动?
让Jetpack Compose for Desktop应用自动以管理员身份启动
要实现启动exe时自动触发UAC提权,核心是给生成的Windows可执行文件添加UAC权限声明,具体步骤如下:
1. 创建自定义Windows Manifest文件
在项目的src/main/resources目录下新建一个名为app.manifest的文件,写入以下内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <!-- 要求以管理员身份运行 --> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>
2. 在Gradle构建脚本中配置使用该Manifest
根据你使用的Gradle DSL类型,修改项目根目录的构建脚本:
Kotlin DSL 示例(build.gradle.kts)
compose.desktop { application { mainClass = "your.package.name.MainKt" nativeDistributions { targetFormats(TargetFormat.EXE, TargetFormat.MSI) packageName = "YourAppName" packageVersion = "1.0.0" windows { // 指定自定义manifest文件路径 manifest.set(project.file("src/main/resources/app.manifest")) // 可选:配置应用图标 // iconFile.set(project.file("src/main/resources/app.ico")) } } } }
Groovy DSL 示例(build.gradle)
compose.desktop { application { mainClass = 'your.package.name.MainKt' nativeDistributions { targetFormats = [EXE, MSI] packageName = 'YourAppName' packageVersion = '1.0.0' windows { manifest = file('src/main/resources/app.manifest') // 可选:配置应用图标 // iconFile = file('src/main/resources/app.ico') } } } }
3. 打包测试
执行Gradle任务packageDesktop(或在IDEA的Gradle面板中找到Tasks/compose desktop/package),打包完成后,在build/compose/binaries/main/exe目录下找到生成的exe文件。双击启动时会自动弹出UAC权限请求窗口,确认后应用就会以管理员身份运行,此时内部调用的外部命令也会继承管理员权限。
注意:一旦配置了
requireAdministrator,无管理员权限的普通用户将无法启动应用,需根据实际场景确认是否需要这种强提权方式。
内容的提问来源于stack exchange,提问作者Jeeva
相关产品推荐
相关产品推荐

