英文:
Getting System.ComponentModel.Win32Exception (5): Access is denied on Azure-Release
问题
我正在使用 Appium WinAppDriver 通过一个 .bat
文件来运行 UI 自动化测试。当我在代理上手动运行 .bat
文件时,一切都如预期运行,但在 Azure Release 中运行时出现了 System.ComponentModel.Win32Exception (5):拒绝访问异常。
尝试过:
BuildUser
是在我的代理机器 DOTNET4
上拥有管理员权限的帐户。
我尝试使用 BuildUser
帐户和我的本地帐户来运行发布管道。
还尝试了不同的方式以管理员身份运行 .bat
文件。
我为包含 WinAppDriver.exe
、AzureAgent.exe
和 AUT 的文件夹提供了完全控制权限。
Azure 代理服务正在使用 Windows 服务中的 BuildUser
帐户运行。我使用 以管理员身份运行
运行这个 .exe
。
.bat 文件的内容附在下面:
@echo off
set TESTDIR=%~1
set LaunchedFromWinAppDriver=True
set ApplicationExe=C:\Git\filePathToExe\application.exe
C:\Git\filePathToExe\AppExeCommandLineRunner.exe -X "%ApplicationExe%"::"%TESTDIR%"
导致异常的代码段:
public static void KillApplication()
{
try
{
string windowHandle = WindowDriver.CurrentWindowHandle;
Log.Debug("CurrentWindowHandl:" + windowHandle);
[DllImport("user32.dll")]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);
IntPtr windowHandlePtr = new IntPtr(Convert.ToInt64(windowHandle, 16));
Log.Debug("WindowHandlePtr:" + windowHandlePtr.ToString());
uint processId;
GetWindowThreadProcessId(windowHandlePtr, out processId);
Log.Debug("Process Id for killing is: " + (int)processId);
Process process = Process.GetProcessById((int)processId);
process.Kill();
}
catch(Exception ex)
{
Log.Error("FailedToKill:", ex);
throw;
}
}
当在 Azure Release 管道中运行时,函数 GetWindowThreadProcessId
返回 0,然后 process.Kill
生成异常。此外,如果我使用其他逻辑提供有效的进程 ID,它也会失败,并产生相同的拒绝访问异常。
当在代理上手动运行 .bat
文件时,GetWindowThreadProcessId
返回与 AUT 关联的有效进程 ID。
我认为这个问题是权限问题。
英文:
I am running UI-Automation Test with Appium WinAppDriver using a .bat
file. When I run the .bat
file manually on the agent everything goes as expected but it produces
System.ComponentModel.Win32Exception (5): Access is denied exception when running through Azure Release.
Tried:
BuildUser
is the account having admin privileges on my agent machine DOTNET4
.
I have tried running the release pipeline using both BuildUser
account and also my local account.
Tried different ways to run the .bat
file as admin too.
I provided Full Control of folder in which I have WinAppDriver.exe
, AzureAgent.exe
, & Folder having AUT.
Azure Agent Service in running using the BuildUser
account in Windows Services. I have this .exe
running using Run as Administrator
.
Contents of .bat file is attached:
@echo off
set TESTDIR=%~1
set LaunchedFromWinAppDriver=True
set ApplicationExe=C:\Git\filePathToExe\application.exe
C:\Git\filePathToExe\AppExeCommandLineRunner.exe -X "%ApplicationExe%"::"%TESTDIR%"
Code Snippet that is causing Exception:
public static void KillApplication()
{
try
{
string windowHandle = WindowDriver.CurrentWindowHandle;
Log.Debug("CurrentWindowHandl:"+windowHandle);
[DllImport("user32.dll")]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);
IntPtr windowHandlePtr = new IntPtr(Convert.ToInt64(windowHandle, 16));
Log.Debug("WindowHandlePtr:" +windowHandlePtr.ToString());
uint processId;
GetWindowThreadProcessId(windowHandlePtr, out processId);
Log.Debug("Process Id for killing is: " + (int)processId);
Process process = Process.GetProcessById((int)processId);
process.Kill();
}
catch(Exception ex)
{
Log.Error("FailedToKill:", ex);
throw;
}
}
Function GetWindowThreadProcessId
returns 0 when run using Azure Release pipeline and then process.Kill generates the exception.process. Additionally if I give a valid Process id using some other logic it fails to Kill that as well giving same access id denied.
GetWindowThreadProcessId
returns a valid process id on which AUT is attached when the .bat
file is run manually on the agent.
I believe this issue is due to a permission issue.
答案1
得分: 0
上述问题发生的原因是Azure代理监听器正在以“服务”的形式运行。当我在系统中以交互式桌面会话手动运行Agent.Listener.exe
时,问题得以解决。
Listener.exe
的路径:"C:\agent\bin\Agent.Listener.exe"
英文:
The above issue was happening because the Azure Agent Listener was running as a service
. It solved when I run the Agent.Listener.exe
manually on the system in a interactive desktop session.
Path to Listener.exe: "C:\agent\bin\Agent.Listener.exe"
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论