0
我有一個wpf應用程序,它可以幫助用戶選擇目錄路徑,當他點擊創建安裝程序按鈕時,我想爲用戶選擇的目錄創建安裝程序(在目錄裏面可能有我多個文件)。wix#創建安裝程序的腳本
我開始知道我可以使用wix腳本,然後在點擊按鈕時調用此腳本。但我不知道如何編寫一個wix#腳本,它爲文件輸入(該安裝程序的文件將要創建)。
我家有基本的wix和新的wix#。請幫我解決我的問題。
我有一個wpf應用程序,它可以幫助用戶選擇目錄路徑,當他點擊創建安裝程序按鈕時,我想爲用戶選擇的目錄創建安裝程序(在目錄裏面可能有我多個文件)。wix#創建安裝程序的腳本
我開始知道我可以使用wix腳本,然後在點擊按鈕時調用此腳本。但我不知道如何編寫一個wix#腳本,它爲文件輸入(該安裝程序的文件將要創建)。
我家有基本的wix和新的wix#。請幫我解決我的問題。
你可以試試Wixsharp解決方案。
你可以從Nuget參考選項(Visual Studio)中獲得它,然後你只需要編寫代碼,以便它可以像你想要的那樣工作。
我將做一個C#示例:
static string sRootDir = @"<Path of Source directory>";
static void BuildMSI()
{
WixEntity[] weDir = new WixEntity[0];
weDir = BuildDirInfo(sRootDir, weDir);
var project = new Project("My product", weDir)
{
GUID = Guid.NewGuid(),
//UI = WUI.WixUI_InstallDir,
Version = new Version(55, 0, 0, 0),
UpgradeCode = guidUpgradeCode, // Forwarded if upgrading existing product
MajorUpgradeStrategy = new MajorUpgradeStrategy
{
UpgradeVersions = VersionRange.OlderThanThis,
PreventDowngradingVersions = VersionRange.NewerThanThis,
NewerProductInstalledErrorMessage = "Newer version already installed"
}
};
project.BuildMsi(project);
}
static WixEntity[] BuildDirInfo(string sRootDir, WixEntity[] weDir)
{
DirectoryInfo RootDirInfo = new DirectoryInfo(sRootDir);
if (RootDirInfo.Exists)
{
DirectoryInfo[] DirInfo = RootDirInfo.GetDirectories();
List<string> lMainDirs = new List<string>();
foreach (DirectoryInfo DirInfoSub in DirInfo)
lMainDirs.Add(DirInfoSub.FullName);
int cnt = lMainDirs.Count;
weDir = new WixEntity[cnt + 1];
if (cnt == 0)
weDir[0] = new DirFiles(RootDirInfo.FullName + @"\*.*");
else
{
weDir[cnt] = new DirFiles(RootDirInfo.FullName + @"\*.*");
for (int i = 0; i < cnt; i++)
{
DirectoryInfo RootSubDirInfo = new DirectoryInfo(lMainDirs[i]);
if (!RootSubDirInfo.Exists)
continue;
WixEntity[] weSubDir = new WixEntity[0];
weSubDir = BuildDirInfo(RootSubDirInfo.FullName, weSubDir);
weDir[i] = new Dir(RootSubDirInfo.Name, weSubDir);
}
}
}
return weDir;
}