|
|
@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
using System;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace Microsoft.AspNetCore.InProcess
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// https://github.com/aspnet/AspNetCore.Docs/blob/master/aspnetcore/host-and-deploy/aspnet-core-module/samples_snapshot/2.x/CurrentDirectoryHelpers.cs
|
|
|
|
|
|
|
|
/// TODO: Remove CurrentDirectoryHelpers.cs when upgrade to ASP.NET Core 3.0.
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
public class CurrentDirectoryHelpers
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
internal const string AspNetCoreModuleDll = "aspnetcorev2_inprocess.dll";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
|
|
|
|
|
|
|
|
private static extern IntPtr GetModuleHandle(string lpModuleName);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[System.Runtime.InteropServices.DllImport(AspNetCoreModuleDll)]
|
|
|
|
|
|
|
|
private static extern int http_get_application_properties(ref IISConfigurationData iiConfigData);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
|
|
|
|
|
|
|
private struct IISConfigurationData
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
public IntPtr pNativeApplication;
|
|
|
|
|
|
|
|
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)]
|
|
|
|
|
|
|
|
public string pwzFullApplicationPath;
|
|
|
|
|
|
|
|
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)]
|
|
|
|
|
|
|
|
public string pwzVirtualApplicationPath;
|
|
|
|
|
|
|
|
public bool fWindowsAuthEnabled;
|
|
|
|
|
|
|
|
public bool fBasicAuthEnabled;
|
|
|
|
|
|
|
|
public bool fAnonymousAuthEnable;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void SetCurrentDirectory()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
try
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// Check if physical path was provided by ANCM
|
|
|
|
|
|
|
|
var sitePhysicalPath = Environment.GetEnvironmentVariable("ASPNETCORE_IIS_PHYSICAL_PATH");
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(sitePhysicalPath))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// Skip if not running ANCM InProcess
|
|
|
|
|
|
|
|
if (GetModuleHandle(AspNetCoreModuleDll) == IntPtr.Zero)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IISConfigurationData configurationData = default(IISConfigurationData);
|
|
|
|
|
|
|
|
if (http_get_application_properties(ref configurationData) != 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sitePhysicalPath = configurationData.pwzFullApplicationPath;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Environment.CurrentDirectory = sitePhysicalPath;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
catch
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// ignore
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|