Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将参数传递给Silverlight OOB应用程序_C#_.net_Silverlight - Fatal编程技术网

C# 将参数传递给Silverlight OOB应用程序

C# 将参数传递给Silverlight OOB应用程序,c#,.net,silverlight,C#,.net,Silverlight,我们有一个Silverlight应用程序,需要访问外围设备,特别是扫描仪。有了这个需求,我们不得不将Silverlight用作OOB应用程序。直到最近,我们还在一个.aspx页面上在线托管我们的silverlight应用程序。我们一直在通过url(即)向这个应用程序传递参数。SL应用程序验证用户名和密码,如果经过验证,则打开传递给它的“屏幕” 我有哪些选项可以让这个SL应用程序以类似于我上面描述的方式工作(作为OOB) 谢谢 -Tom当您安装Silverlight应用程序来运行OOB时,它会在独

我们有一个Silverlight应用程序,需要访问外围设备,特别是扫描仪。有了这个需求,我们不得不将Silverlight用作OOB应用程序。直到最近,我们还在一个.aspx页面上在线托管我们的silverlight应用程序。我们一直在通过url(即)向这个应用程序传递参数。SL应用程序验证用户名和密码,如果经过验证,则打开传递给它的“屏幕”

我有哪些选项可以让这个SL应用程序以类似于我上面描述的方式工作(作为OOB)

谢谢


-Tom

当您安装Silverlight应用程序来运行OOB时,它会在独立存储中创建一个目录,该目录中有一个index.htm页面,实际上“承载”OOB应用程序。(此处描述:)。您需要做的一种方法是编辑index.htm页面,并在那里传递参数。当然,您需要弄清楚如何编辑该页面(可能很难自动完成,除非您有setup.exe)。仅仅提示用户输入他们的用户名/密码是否更有意义?您只需执行一次操作——之后,您可以将其存储在某个已知位置的配置文件中(可能是加密的,或者至少以某种方式进行了模糊处理)。

如果您使用Silverlight 4,另一种可能性是将值存储到Windows注册表中。这就是我们使用的用户名、数据库名等

您可以在启动时让应用程序回调web服务以请求此数据,而不是通过URL传递数据。或者将其存储在隔离存储中(但我不建议将密码放在那里,隔离存储不安全),并在启动时使用


即使有另一种方法将启动参数传递给OOB应用程序,您希望用户如何调用它?通过某种链接?您创建的自定义快捷方式?由于用户仅通过“开始”菜单或桌面启动OOB应用程序,因此我不知道在这些情况下真正可用的上下文是什么。

我真的,真的希望您不要像那样认真地在URL中输入密码……不,我们将混淆并加密传递给应用程序的参数。除非您有更好的建议?仅供参考,否则强烈建议不要像这样依赖OOB应用程序缓存的实现细节。我们(Silverlight团队)不记录这些东西是有原因的,因为它可能会改变。我建议任何人都假设这是一个黑匣子,不要把它弄乱。这是正确的观点。但是你有更好的建议吗?是否有更好的/受支持的方法将命令行参数传递给OOB Silverlight应用程序?我们有一个会计应用程序,可以打开Silverlight屏幕。我们希望传递给SL应用程序的参数存储在配置文件中(每个公司都有自己的CorpID和令牌以及其他凭据)。当他们点击对应于SL屏幕的菜单项时,我们希望确保应用程序无缝打开,而不需要最终用户手动输入他们的“令牌”和“公司id”。我明白了-这应该很容易。在安装时(当您的应用程序获得InstallStateChanged事件时,或者当您调用application.Current.install()时),您可以获取当时正在使用的CorpID和令牌(可能来自URL,或者InitParams-无所谓),并将其写入隔离存储。你可能想加密它-你的电话。然后,当应用程序运行时,它可以检查Application.isruninoutofbrowser,如果为true,则在Iso存储中而不是在URL/InitParams中查找值。如何进入需要打开的“屏幕”?每个菜单项对应不同的屏幕。因此,如果用户单击“关于”菜单项,Silverlight中的“关于”屏幕需要打开。我不明白你为什么要这样做-OOB应用程序将是整个应用程序,对吗?他们不会在每个屏幕上安装一次应用程序。因此,当用户从桌面/开始菜单打开OOB应用程序时,可能每次都应该在主屏幕上启动,或者记住上次访问的屏幕(将该信息保存在Iso存储中)。SL应用程序将以多种方式访问。它可以通过网络(只有在运行OOB时才有扫描仪)和我们的会计软件包访问。当运行我们的会计包时,我们不希望最终用户传入我们存储的信息。此外,如果用户选择SL屏幕,我们只想打开该特定屏幕。这可能看起来过于复杂,但它需要以这种方式工作。