File: src\Framework\System\Windows\StartupEventArgs.cs
Project: wpf\PresentationFramework.csproj (PresentationFramework)
//-------------------------------------------------------------------------------------------------
// File: StartupEventArgs.cs
//
// Copyright (C) 2004 by Microsoft Corporation.  All rights reserved.
// 
// Description:
//          This event is fired when the application starts  - once that application’s Run() 
//          method has been called. 
//
//          The developer will typically hook this event if they want to take action at startup time 
//
// History:
//  08/10/04: kusumav   Moved out of Application.cs to its own separate file.
//  05/09/05: hamidm    Created StartupEventArgs.cs and renamed StartingUpCancelEventArgs to StartupEventArgs
//
//---------------------------------------------------------------------------
 
using System.ComponentModel;
 
using System.Windows.Interop;
using MS.Internal.PresentationFramework;
using System.Runtime.CompilerServices;
using MS.Internal;
using MS.Internal.AppModel; 
 
namespace System.Windows
{
    /// <summary>
    /// Event args for Startup event
    /// </summary>
    public class StartupEventArgs : EventArgs
    {
        /// <summary>
        /// constructor
        /// </summary>
        internal StartupEventArgs()
        {
            _performDefaultAction = true;
        }
 
 
        /// <summary>
        /// Command Line arguments
        /// </summary>
        public String[] Args
        {
            get
            {
                if (_args == null)
                {
                    _args = GetCmdLineArgs();
                }
                return _args;
            }
        }
 
        internal bool PerformDefaultAction
        {
            get { return _performDefaultAction; }
            set { _performDefaultAction = value; }
        }
 
 
        private string[] GetCmdLineArgs()
        {
            string[] retValue = null;
 
            if (!BrowserInteropHelper.IsBrowserHosted && 
                 ( ( Application.Current.MimeType != MimeType.Application ) 
                   || ! IsOnNetworkShareForDeployedApps() ))
            {
                string[] args = Environment.GetCommandLineArgs();
                Invariant.Assert(args.Length >= 1);
 
                int newLength = args.Length - 1;
                newLength = (newLength >=0 ? newLength : 0);
                
                retValue = new string[newLength];
                
                for (int i = 1; i < args.Length; i++)
                {
                    retValue[i-1] = args[i];
                }
            }
            else
            {
                retValue = new string[0];
            }
 
            return retValue;
        }
        
        //
        // Put this into a separate Method to avoid loading of this code at JIT time. 
        // 
 
        //
        // Explicitly tell the compiler that we don't want to be inlined. 
        // This will prevent loading of system.deployment unless we are a click-once app. 
        // 
        [MethodImplAttribute (MethodImplOptions.NoInlining )]
        private bool IsOnNetworkShareForDeployedApps()
        {
            return System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed ; 
        }
        
        private String[]    _args;
        private bool        _performDefaultAction;
    }
}