Beispiel #1
0
        static void ReturnSetup(HttpContext context, AppInfo info)
        {
            var request = context.Request;
            var response = context.Response;

            response.AppendHeader("Content-Disposition", string.Format("attachment; filename={0}.exe", info.SetupName));
            response.ContentType = "application/octet-stream";

            var setupPath = Path.Combine(info.AssetPath, "setup.exe");

            var proposedReturnUrl = new UriBuilder(request.Url)
                                        {
                                            Path = info.VirtualPath,
                                            Query = string.Empty,
                                            Fragment = string.Empty
                                        }.Uri.ToString();
            var installUrl = info.ReturnUrlSelector(request, proposedReturnUrl);
            var xtallParameters = string.Format("-install \"{0}\"", installUrl);
            var parameters = info.ParameterSelector(request, xtallParameters);

            if (string.IsNullOrWhiteSpace(parameters))
            {
                // no need to rewrite
                response.TransmitFile(setupPath);
                response.End();
            }

            /* TODO
            if (info.CachePath != null)
            {
                var tempPath = Path.Combine(info.CachePath, Path.GetRandomFileName());
                using(var destination = File.OpenWrite(tempPath))
                using(var source = File.OpenRead(setupPath))
                    WriteParameters(source, parameters, destination);
                context.Response.TransmitFile(tempPath);
                context.Response.End();
            }
            */

            using (var source = File.OpenRead(setupPath))
                WriteParameters(source, parameters, context.Response.OutputStream);

            response.End();
        }