通过ICA文件从Client CMD传递参数以启动已发布的Citrix App

Bec*_*oon 9 parameters command-line citrix xenapp

我正在尝试使用CMA线路调用从C#web应用程序代码向Citrix XenApp Server发送一个简单的字符串参数,以启动特定的已发布应用程序(编译为exe的宏调度程序宏),而不是整个Citrix桌面.

我有一个使用cmd行代码的Web应用程序

"C:\Program Files (x86)\Citrix\ICA Client\Wfica32.exe"  C:\someICAfile.ica \Param:"/username=SomebodysName" .
Run Code Online (Sandbox Code Playgroud)

我也试过参数语法: /username=SomebodysName, /Param:"/username=SomebodysName"

以及大约一百万个引号和斜线的其他组合.

我使用Citrix QuickLaunch来编写我的ICA文件,其中我唯一改变的是InitialProgram=#ApplicationName \Param(我添加了\ Param).我也试过了/username,\Param=SomebodysName我也无法让任何人工作.我甚至试过在那里硬编码这个名字,我无法让它通过.

exe期望参数" username",当从cmd提示符本地调用时,它可以使用UsernameProgram.exe /username=somebodysname.我确保在Citrix Xenapp应用程序位置属性%*的末尾包含" ",commandlineexecutable以确保它可以接受命令行参数.

这都是使用C#和XenApp 6.一切正常,除了传递参数,我不知道参数丢失的位置,如果它甚至可以到达任何地方.我觉得我已经尝试了/和s的所有组合,所以如果有人能帮我解决语法问题,我真的很感激!我确实试过在c#中查看ICA Client SDK代码,但它似乎只是手动执行外部ICA文件将执行的操作.但是,如果这是错误的,请告诉我.我正在接近我将要尝试它的点,因为我完全没有想法.请帮忙.

谢谢!

Bec*_*oon 5

我最终通过使用以下内容从我的C#代码调用.bat文件:

Process proc_Launch = new Process();
proc_Launch.StartInfo.FileName = "CreateTempICA.bat";
proc_Launch.StartInfo.RedirectStandardError = false;
proc_Launch.StartInfo.RedirectStandardOutput = false;
proc_Launch.StartInfo.WorkingDirectory = @"C:\WorkingDirectory";
proc_Launch.StartInfo.Arguments = @"""/username=somebodysname""";
proc_Launch.Start();
Run Code Online (Sandbox Code Playgroud)

reference:使用.exe和.def代码在c#中运行bat文件

在.bat文件中,我创建了一个传递用户名参数的ICA文件,如下所示:

@echo off
:makefile
pushd %temp%
set icafile=temp.ica
@echo [WFClient] > %icafile%
@echo Version = 2 >> %icafile%
@echo HttpBrowserAddress=ServerName:8080 >> %icafile%
@echo ProxyType=Auto >> %icafile%
@echo ConnectionBar=0 >> %icafile%
@echo [ApplicationServers] >> %icafile%
@echo ApplicationName= >> %icafile%
@echo [ApplicationName] >> %icafile%
@echo Address = ApplicationName >> %icafile%
@echo InitialProgram=#"ApplicationName"%1 >> %icafile%
@echo ClientAudio=On >> %icafile%
@echo AudioBandwidthLimit=1 >> %icafile%
@echo CGPAddress=*:#### (use actual numbers here though) >> %icafile%
@echo CDMAllowed=On >> %icafile%
@echo CPMAllowed=On >> %icafile%
@echo DesiredColor=8 >> %icafile%
@echo ConnectionBar=0 >> %icafile%
@echo TWIMode=On >> %icafile%
@echo Compress=On >> %icafile%
@echo TransportDriver=TCP/IP >> %icafile%
@echo WinStationDriver=ICA 3.0 >> %icafile%
@echo BrowserProtocol=HTTPonTCP >> %icafile%
@echo [Compress] >> %icafile%
@echo DriverName= PDCOMP.DLL >> %icafile%
@echo DriverNameWin16= PDCOMPW.DLL >> %icafile%
@echo DriverNameWin32= PDCOMPN.DLL >> %icafile%
start %icafile%
popd
Run Code Online (Sandbox Code Playgroud)

InitialProgram组件中的%1是从C#代码中使用参数的位置.

参考:http://www.virtualizationadmin.com/files/whitepapers/MetaframeXP/Connecting_to_a_Citrix_server_from_the_command_line.htm

最后一步是确保在Citrix Delivery Console中确保CommandLineExecutable的已发布应用程序的位置属性后面包含"%**",包括双引号.我相信添加第二个星号可让参数通过命令行验证,并允许在打开应用程序时使用它.无论哪种方式,它与其中两个一起工作而不是其中一个.