У меня есть проект C#, который вызывает C++ CLI через DLL. Он возвращает строку в C#, которая отображается в текстовом поле в событии кнопки. Я добавил эту dll (с именем MyDll.dll), добавив ее в качестве ссылки в мои свойства проекта C#. Я пытаюсь создать установщик с помощью набора инструментов wix. Вот исходный код.C# с проектом CLI EXE, установленный через установщик WIX, не работает
C# Код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MyDll;
namespace MyProject
{
public partial class Form1 : Form
{
public Class1 obj = new Class1();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string str = "";
string str_new = obj.MyFunc(str);
textBox1.Text = str_new;
}
}
}
C++ CLI код
#include "stdafx.h"
#include "MyDll.h"
namespace MyDll
{
Class1::Class1(){}
Class1::~Class1(){}
Class1::!Class1(){}
String^ Class1::MyFunc([Out] String^ str)
{
str = "My C++/Cli DLL";
return outVal = str;
}
}
CLI C++ Header
// MyDll.h
#pragma once
using namespace System;
using namespace System::Runtime::InteropServices;
namespace MyDll {
public ref class Class1
{
// TODO: Add your methods for this class here.
public:
Class1::Class1();
Class1::~Class1();
Class1::!Class1();
String^ MyFunc([Out] String^ str);
String^ outVal;
};
}
Мои WXS Файл
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="installer_test" Language="1033" Version="1.0.0.0" Manufacturer="Company" UpgradeCode="a928c48a-8e5b-4038-b871-939ff8a9349f">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate />
<Feature Id="ProductFeature" Title="installer_test" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Property Id="ROOTDRIVE">
<![CDATA[E:\]]>
</Property>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles" Name="ProgramFiles">
<Directory Id="TopFolder" Name="EXE3">
<Directory Id="INSTALLFOLDER" Name="Main folder">
<Component Id="cmpMain" Guid="{0509AAED-64A8-43F6-8935-70FB12305189}" KeyPath="yes" Feature="ProductFeature">
<File Source="$(var.MyProject.TargetPath)" />
<File Source="$(var.MyProject.TargetPath)" Name="MyDll.dll" ShortName="AF" />
</Component>
</Directory>
</Directory>
</Directory>
</Directory>
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER"></Property>
<UIRef Id="WixUI_InstallDir"/>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
<!-- <Component Id="ProductComponent"> -->
<!-- <File Source="$(var.MyProject.TargetPath)"/>-->
<!-- TODO: Insert files, registry keys, and other resources here. -->
<!-- </Component> -->
</ComponentGroup>
</Fragment>
</Wix>
Мой инсталлятор работает отлично. Он устанавливает exe и dll (MyDll.dll) с указанным путем. Но когда я запускаю exe, он ничего не делает. Если я заменил установленный exe на exe, который создается в папке bin моего проекта C#, тогда он отлично работает. Как я могу решить эту проблему?
Благодаря