windows - Windows 在 Maven 生成期間運行批處理腳本作為管理

  显示原文与译文双语对照的内容
110 3

我在嘗試建立一個構建過程,在這個過程中,Windows 服務必須啟動和停止。我嘗試使用 exec-maven-plugin:

<plugin>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>exec-maven-plugin</artifactId>
 <version>1.6.0</version>
 <executions>
 <execution>
 <id>startServer</id>
 <goals>
 <goal>exec</goal>
 </goals>
 <configuration>
 <executable>${project.basedir}/bin/startService.cmd</executable>
 <workingDirectory>${project.basedir}/bin</workingDirectory>
 </configuration>
 </execution>
 </executions>
</plugin>

我遇到的問題是,為了能夠控制服務,你需要擁有adminsitrative許可權。我的用戶是本地管理員,因這裡如果在提升的提示下運行( 右 click->',則腳本運行為 adminsitrator') 。

我試過使用 runas/user:administrator,但它提示輸入密碼。我可以以將 Maven 構建本身作為管理員運行,但是我想從這些可以能不可以能的環境運行它。

是否有人對如何實現所描述的場景有一個想法?

时间:原作者:0个回答

81 5

這是我在批處理文件中將 mkdir提升為 admin的另一半解決方案。前一半是控制台。這是更通用的非控制台解決方案。WshShell.Run 作為控制台程序工作不正常,因此使用了 vb/vba shell 命令。WshShell.Run 有一個窗口樣式( 0已經隱藏) 和一個在應用程序上等待的標誌。

將文件放在桌面上。它們必須是 ANSI 。

RunAsAdmin.vb

imports System.Runtime.InteropServices 
Public Module MyApplication 
Public Sub Main ()
 Dim wshshell as object
 WshShell = CreateObject("WScript.Shell")
 '8 is non active window, true means wait for exit
 WshShell.Run("""C:WindowsNotepad.exe""",8, true)
 End Sub 
End Module 

RunAsAdmin.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
 version="1.0.0.0"
 processorArchitecture="*"
 name="Color Management"
 type="win32"
/>
<description>Serenity's Editor</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
<security> 
 <requestedPrivileges> 
 <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> 
 </requestedPrivileges> 
</security> 
</trustInfo> 
</assembly>

要編譯的命令。

C:WindowsMicrosoft.NETFrameworkv4.0.30319vbc"%userprofile%DesktopRunAsAdmin.vb"/win32manifest:"%userprofile%DesktopRunAsAdmin.manifest"/out:"%userprofile%DesktopRunAsAdmin.exe"/target:winexe
原作者:
...