none
как запустить WPF Browser Application с ключами (параметрами)? RRS feed

  • Вопрос

  • Здравствуйте.

    Я создал WPF Browser Application, а запускаю его через гиперссылку в html страничке. Нужно через гиперссылку передать этой программе параметр запуска (точнее одно string значение). Можно как-нибудь это осуществить? Спасибо.

     


    Hello

    I created a WPF Browser Application, and run it through a hyperlink in a html page. Must pass through a hyperlink to this program startup option (actually a string value). Can something like this be done? Thank you.
    16 июля 2011 г. 4:43

Все ответы

  • Здравствуйте.

    Можно задать стартовые параметры приложения при помощи параметризированного url (т.е. как обычный GET запрос).

    Далее в приложении использовать класс ApplicationDeployment и его свойство ApplicationDeployment.ActivationUri для получения адреса и его параметров (смотрите пример к свойству).

    Но для его работы необходимо разрешить в манифесте:

    <TrustUrlParameters>true</TrustUrlParameters>
    

     


    Для связи [mail]
    17 июля 2011 г. 11:16
  • Благодарю за ответ, вот только я, несчастный чайник, особо ничего не понял.

    Вот такой тег (например) в html я использую для вызова wpf программы:

    <a href="WpfBrowserApplication1.xbap">программа</a>

    Не могли бы подсказать куда и что писать для передачи ей одного единственного параметра?

    18 июля 2011 г. 6:35
  • Вот так WpfBrowserApplication1.xbap?name=Dima&country=Russia
    Для связи [mail]
    18 июля 2011 г. 9:08
  • стыдно конечно а все таки спрошу

    А как в программе получить этот параметр? Повозился с примером из  ApplicationDeployment.ActivationUri пишет

    Error 1 The name 'ApplicationDeployment' does not exist in the current context C:\Documents and Settings\user\Мои документы\Visual Studio 2008\Projects\WpfBrowserApplication1\WpfBrowserApplication1\Page1.xaml.cs 32 17 WpfBrowserApplication1

    и че надо делать с  GetQueryStringParameters() ?

    18 июля 2011 г. 11:05
  • Посмотрите есть ли в referneces проекта (в окне Solution Explorer) ссылка на сборку System.Deployment, если нет - то добавьте. И также необходимо подключить пространство имен System.Deployment.Application.

    Далее как в примере вы получите колеекцию ключ-значение, где ключ это имя параметра, а значение - его значение.

    Для примера выше это будет: ключ name, значение Dmitry и ключ country, значение Russia.


    Для связи [mail]
    18 июля 2011 г. 14:32
  • Все сделал как вы сказали. А как из кода получить значение ключа не знаю. По догадке написал

    GetQueryStringParameters().GetValues(

    "name").ToString();

    при запуске пишет

    System.Windows.Markup.XamlParseException was unhandled
    Message: Cannot create instance of 'Page1' defined in assembly 'WpfBrowserApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Exception has been thrown by the target of an invocation.  Error in markup file 'Page1.xaml' Line 1 Position 7.

    мне бы одно значение получить

    19 июля 2011 г. 6:11
  • Посмотрите что у вас в разметке страницы на певой строке симовл 7. Или если можете - приведите XAML или его часть.


    Для связи [mail]
    19 июля 2011 г. 9:38
  • пожалуйста

    <

    Page x:Class

    ="WpfBrowserApplication1.Page1"

     

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     

     

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     

     

    Title="Page1" Width="364">
     

     

    <Grid

    >

     

    <Label Height="28" Margin="80,103,164,0" Name="label1" VerticalAlignment="Top">Label</Label

    >

     

    </Grid

    >

    </

    Page>

     

    а вот код

    using

     

    System;

    using

     

    System.Collections.Generic;

    using

     

    System.Linq;

    using

     

    System.Text;

    using

     

    System.Windows;

    using

     

    System.Windows.Controls;

    using

     

    System.Windows.Data;

    using

     

    System.Windows.Documents;

    using

     

    System.Windows.Input;

    using

     

    System.Windows.Media;

    using

     

    System.Windows.Media.Imaging;

    using

     

    System.Windows.Navigation;

    using

     

    System.Windows.Shapes;

    using

     

    System.Collections.Specialized;

    using

     

    System.Deployment.Application;

    using

     

    System.Web;

    namespace

     

    WpfBrowserApplication1

    {

     

    ///

    <summary>

     

    ///

    Interaction logic for Page1.xaml

     

    ///

    </summary>

     

    public partial class Page1 :

    Page

    {

     

    public

    Page1()

    {

    InitializeComponent();

    label1.Content = GetQueryStringParameters().GetValues(

    "name"

    ).ToString();

    }

     

    private NameValueCollection

    GetQueryStringParameters()

    {

     

    NameValueCollection nameValueTable = new NameValueCollection

    ();

     

    if (ApplicationDeployment

    .IsNetworkDeployed)

    {

     

    string queryString = ApplicationDeployment

    .CurrentDeployment.ActivationUri.Query;

    nameValueTable =

    HttpUtility

    .ParseQueryString(queryString);

    }

     

    return

    (nameValueTable);

    }

    }

    }

    

     

     

     

     

     

     

    а вот манифест

    <?

     

    xml version="1.0" encoding="utf-8"

    ?>

    <

     

    asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    >

    <

     

    assemblyIdentity version="1.0.0.0" name="MyApplication.app"

    />

    <

     

    trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"

    >

    <

     

    TrustUrlParameters>true</TrustUrlParameters

    >

    <

     

    security

    >

    <

     

    applicationRequestMinimum

    >

    <

     

    defaultAssemblyRequest permissionSetReference="Custom"

    />

    <

     

    PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site"

    />

    </

     

    applicationRequestMinimum

    >

    <

     

    requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"

    >

    <

     

    requestedExecutionLevel level="asInvoker" uiAccess="false"

    />

    </

     

    requestedPrivileges

    >

    </

     

    security

    >

    </

     

    trustInfo

    >

    </

     

    asmv1:assembly>

     

     
    20 июля 2011 г. 3:19
  • а если запустить через гиперссылку

    WpfBrowserApplication1.xbap?name=Dima

    пишет Application not valid и выдает такой лог

    PLATFORM VERSION INFO
     Windows    : 5.1.2600.196608 (Win32NT)
     Common Language Runtime  : 2.0.50727.1433
     System.Deployment.dll   : 2.0.50727.1433 (REDBITS.050727-1400)
     mscorwks.dll    : 2.0.50727.1433 (REDBITS.050727-1400)
     dfshim.dll    : 2.0.50727.1433 (REDBITS.050727-1400)

    SOURCES
     Deployment url   : file:///C:/Documents%20and%20Settings/user/%D0%9C%D0%BE%D0%B8%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B/Visual%20Studio%202008/Projects/WpfBrowserApplication1/WpfBrowserApplication1/bin/Debug/WpfBrowserApplication1.xbap

    IDENTITIES
     Deployment Identity  : WpfBrowserApplication1.xbap, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ccebcc2a4dfcdf92, processorArchitecture=msil

    APPLICATION SUMMARY
     * Online only application.

    ERROR SUMMARY
     Below is a summary of the errors, details of these errors are listed later in the log.
     * An exception occurred while downloading the manifest. Following failure messages were detected:
      + Exception reading manifest from file:///C:/Documents%20and%20Settings/user/%D0%9C%D0%BE%D0%B8%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B/Visual%20Studio%202008/Projects/WpfBrowserApplication1/WpfBrowserApplication1/bin/Debug/WpfBrowserApplication1.exe.manifest: the manifest may not be valid or the file could not be opened.
      + The element 'trustInfo' in namespace 'urn:schemas-microsoft-com:asm.v2' has invalid child element 'TrustUrlParameters' in namespace 'urn:schemas-microsoft-com:asm.v2'. List of possible elements expected: any element in namespace '##other'.

    COMPONENT STORE TRANSACTION FAILURE SUMMARY
     No transaction error was detected.

    WARNINGS
     There were no warnings during this operation.

    OPERATION PROGRESS STATUS
     No phase information is available.

    ERROR DETAILS
     Following errors were detected during this operation.
     * [20.07.2011 9:32:18] System.Deployment.Application.InvalidDeploymentException (ManifestParse)
      - Exception reading manifest from file:///C:/Documents%20and%20Settings/user/%D0%9C%D0%BE%D0%B8%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B/Visual%20Studio%202008/Projects/WpfBrowserApplication1/WpfBrowserApplication1/bin/Debug/WpfBrowserApplication1.exe.manifest: the manifest may not be valid or the file could not be opened.
      - Source: System.Deployment
      - Stack trace:
       at System.Deployment.Application.ManifestReader.FromDocument(String localPath, ManifestType manifestType, Uri sourceUri)
       at System.Deployment.Application.DownloadManager.DownloadApplicationManifest(AssemblyManifest deploymentManifest, String targetDir, Uri deploymentUri, IDownloadNotification notification, DownloadOptions options, Uri& appSourceUri, String& appManifestPath)
       at System.Deployment.Application.DeploymentManager.BindCore(Boolean blocking, TempFile& tempDeploy, TempDirectory& tempAppDir, FileStream& refTransaction, String& productName)
       at System.Deployment.Application.DeploymentManager.BindAsyncWorker()
      --- Inner Exception ---
      System.Xml.Schema.XmlSchemaValidationException
      - The element 'trustInfo' in namespace 'urn:schemas-microsoft-com:asm.v2' has invalid child element 'TrustUrlParameters' in namespace 'urn:schemas-microsoft-com:asm.v2'. List of possible elements expected: any element in namespace '##other'.
      - Source: System.Xml
      - Stack trace:
       at System.Xml.Schema.XmlSchemaValidator.SendValidationEvent(ValidationEventHandler eventHandler, Object sender, XmlSchemaValidationException e, XmlSeverityType severity)
       at System.Xml.Schema.XmlSchemaValidator.ElementValidationError(XmlQualifiedName name, ValidationState context, ValidationEventHandler eventHandler, Object sender, String sourceUri, Int32 lineNo, Int32 linePos, Boolean getParticles)
       at System.Xml.Schema.XmlSchemaValidator.ValidateElementContext(XmlQualifiedName elementName, Boolean& invalidElementInContext)
       at System.Xml.Schema.XmlSchemaValidator.ValidateElement(String localName, String namespaceUri, XmlSchemaInfo schemaInfo, String xsiType, String xsiNil, String xsiSchemaLocation, String xsiNoNamespaceSchemaLocation)
       at System.Xml.XsdValidatingReader.ProcessElementEvent()
       at System.Xml.XsdValidatingReader.ProcessReaderEvent()
       at System.Xml.XsdValidatingReader.Read()
       at System.Deployment.Application.ManifestReader.FromDocument(String localPath, ManifestType manifestType, Uri sourceUri)

    COMPONENT STORE TRANSACTION DETAILS
     No transaction information is available.

     

    20 июля 2011 г. 3:29
  • Здравствуйте.

    Удалите из манифеста строку (она была ошибочной):

    <TrustUrlParameters>true</TrustUrlParameters>
    
    

    Чтобы получить параметры из url, необходимо где-нибудь разверуть ваше приложение. Из Visual Studio оно работать не будет. Данные параметры работают только при публикации через Click Once и только в схеме uri: http://..

    Тажке вместо ApplicationDeployment.CurrentDeployment.ActivationUri можно попробовать использовать BrowserInteropHelper.Source, но это также требует публикации и разрешения параметров URL.

    Параметры URL разрешаются в свойствах проект на вкладке Publish - Options - Manifests - Allow URL parameters to be passed to the application.

    Можете посмотреть статью How can I pass Querystring parameters to my WPF XBAP Application?


    Для связи [mail]
    20 июля 2011 г. 6:25
  • пробовал и так и сяк, не получается. То ссылка на объект не указывает, то ключ к приложению не подходит, то с конструктором какие-то проблемы...

    у кого-нибудь нет готового примера?

    21 июля 2011 г. 4:22