using System;
using System.Configuration;
using System.IO;
class Program
{
static void Main()
{
string sourcePath =
ConfigurationManager.AppSettings["SourcePath"];
string destinationPath =
ConfigurationManager.AppSettings["DestinationPath"];
string poolname =
ConfigurationManager.AppSettings["Poolname"];
bool hasFiles =
Directory.Exists(sourcePath) &&
Directory.GetFiles(sourcePath, "*", SearchOption.AllDirectories).Length > 0;
if (hasFiles)
{
// Stop IIS App Pool
Run(
$@"C:\Windows\system32\inetsrv\appcmd stop apppool /apppool.name:""{poolname}""",
"step1"
);
// Copy files
Run(
$@"robocopy ""{sourcePath}"" ""{destinationPath}"" /E /MOV /R:1 /W:1",
"step2"
);
// Start IIS App Pool
Run(
$@"C:\Windows\system32\inetsrv\appcmd start apppool /apppool.name:""{poolname}""",
"step3"
);
}
else
{
Console.WriteLine("No files found in source path.");
}
}
static void Run(string cmd, string step)
{
Console.WriteLine(step);
var psi = new System.Diagnostics.ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = "/c " + cmd,
Verb = "runas",
UseShellExecute = true
};
using (var p = System.Diagnostics.Process.Start(psi))
{
p.WaitForExit();
}
}
}
Use the values from App.config directly instead of hardcoded paths.
App.config
<configuration>
<appSettings>
<add key="SourcePath"
value="F:\AutoPublish\Api"/>
<add key="DestinationPath"
value="C:\inetpub\wwwroot\solution"/>
<add key="Poolname"
value="abc.com"/>
</appSettings>
</configuration>
Advantage
Now you can change:
- source folder
- destination folder
- IIS app pool
without recompiling the application.
| Option | Result |
|---|---|
/MOV | Move files only |
/MOVE | Move files + directories |
Sign up here with your email
ConversionConversion EmoticonEmoticon