小编inv*_*nva的帖子

卸载前WiX关闭应用程序 - 关闭打开的应用程序消息

我有点痛苦.我有安装程序安装并启动托盘图标应用程序(常见的.exe)

这工作正常,但现在我想在此UI之前停止该应用程序,告诉用户手动关闭应用程序,因为在卸载例程期间,我的托盘图标被删除但进程仍在运行.

我在卸载之前(甚至在执行期间)应用此自定义操作来关闭应用程序

<CustomAction Id="CloseTrayApp" ExeCommand="-exit" FileKey="TrayApp" Execute="immediate" Return="asyncNoWait" />

<InstallExecuteSequence>
    <Custom Action="CloseTrayApp" Before="InstallValidate" />
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

但是"关闭所有正在运行的应用程序"对话框仍然会弹出,但我认为这将解决我的问题.

我已经尝试使用CloseAction但是由于编译时的错误而我急于使用它.它说WixUtils名称空间可能会丢失,但我仔细检查它是否存在:

xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
Run Code Online (Sandbox Code Playgroud)

如何避免弹出对话框窗口并触发执行此自定义操作?

installation installer wix

9
推荐指数
1
解决办法
9351
查看次数

NUnit C#Test Project引用其他DLL

我浏览了stackoverflow上陈述的几个nunit和visual studio问题,但找不到我的情况适合的任何线程.

我正在使用NUnit来测试我编写的一些代码,我正在将我的testproject的*.csproj文件加载到NUnit GUI工具中.

我想出了我猜的问题,但到目前为止我没有解决方案.我在做什么:

我引用其他2个项目都是dll项目.这意味着我有3个项目:TestProject(DLL),SettingsManager(DLL),DatabaseInterface(DLL).所有都在一个解决方案.DatabaseInterface项目包含对另一个C++ x86 DLL的本机api调用,但不通过"using"语句显式引用此DLL.

其中一个是SettingsManager,存储一些配置数据,如路径等,但无论如何.Testproject和DatabaseInterface都引用了SettingsManager.

所有3个项目都在"Debug"和"AnyCPU"下构建.仅在我的TestProject中引用和使用SettingsManager工作正常,但是当我添加DatabaseInterface时,我得到一个BadImageFormatException,告诉我它正在尝试加载格式错误的文件.

为了使其更加明显,那就是:

using myNamespace.Settings; // contains SettingsManager
using System;
using NUnit.Framework;

namespace myNamespace.myTestProject
{
    [TestFixture]
    public class TestProject
    {
        [SetUp]
        public void SetUp()
        {

        }

        [Test]
        public void ReadDbFile()
        {
            string s = SettingsManager.DbFile; // gets the path of the db file
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

NUnit输出:

这不起作用:

using myNamespace.Settings; // contains SettingsManager
using myNamespace.DbInterface; // contains DatabaseInterface, which contains native calls to C++ dll
using System;
using NUnit.Framework;

namespace myNamespace.myTestProject
{ …
Run Code Online (Sandbox Code Playgroud)

.net c# nunit visual-studio

6
推荐指数
1
解决办法
2742
查看次数

将 Java 代码文档转换为 C#

我必须将几个 jave 方法注释更改为 C# 注释语法,并且我正在寻找能够执行此转换的工具。

有谁知道一个能够将注释从java风格转换为c#风格的工具吗?

.net c# xml comments

5
推荐指数
1
解决办法
297
查看次数

每个客户端的WCF CPU使用率增加25%

正如标题所说,我得到了一个定义了这种服务行为的WCF服务器:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
Run Code Online (Sandbox Code Playgroud)

我'使用命名管道绑定,我的客户端以这种方式连接:

    NetNamedPipeBinding binding = new NetNamedPipeBinding();
const int maxValue = 0x40000000; // 1GB
binding.MaxBufferSize = maxValue; 
binding.MaxReceivedMessageSize = maxValue;

binding.ReaderQuotas.MaxArrayLength = maxValue;
binding.ReaderQuotas.MaxBytesPerRead = maxValue;
binding.ReaderQuotas.MaxStringContentLength = maxValue;

// receive timeout acts like a general timeout
binding.ReceiveTimeout = TimeSpan.MaxValue;
binding.SendTimeout = TimeSpan.MaxValue;

ChannelFactory<IDatabaseSession> pipeFactory = new ChannelFactory<IDatabaseSession>(binding, new EndpointAddress("net.pipe://localhost/DatabaseService"));

IDatabaseSession dbSession = pipeFactory.CreateChannel()
Run Code Online (Sandbox Code Playgroud)

我开始的每个客户端执行上面的代码,并且对于每个客户端,CPU使用率提高了25%(实际上不是为5.客户端,但此时可执行的服务覆盖了整个CPU容量的近100%).

我正在寻找的是一种资源(网站/列表或只是你强大的知识)告诉我CreateChannel实际上做了什么(关于资源分配问题).

提示:即使没有实际进行通信,CPU使用率也会增加,只创建了Channel.

.net c# wcf

5
推荐指数
1
解决办法
782
查看次数

HttpWebRequest仅在.NET 4.0上运行

我遇到了一个奇怪的问题,甚至是WebRequest的行为.首先,这是我正在尝试做的事情:

Dim req As HttpWebRequest = CType(Net.WebRequest.Create("https://cloud.myweb.de/myenginge/dostuff"), HttpWebRequest)

Dim inputString As String = "text=DoStuff"
Dim data As Byte() = System.Text.Encoding.ASCII.GetBytes(inputString)

req.Method = "POST"
req.Accept = "application/xml;q=0.9,*/*;q=0.8"

req.ContentType = "application/x-www-form-urlencoded"
req.ContentLength = data.Length

str2 = req.GetRequestStream()

str2.Write(data, 0, data.Length)
str2.Close()

Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
str = resp.GetResponseStream()
buffer = New IO.StreamReader(str, System.Text.Encoding.ASCII).ReadToEnd
Run Code Online (Sandbox Code Playgroud)

但是在我的编译设置中设置.NET Frame 3.5将导致超时:

str2 = req.GetRequestStream()
Run Code Online (Sandbox Code Playgroud)

设置框架版本4.0工作,一切都通过,没有任何超时问题.有人知道为什么会这样吗?我也试过3.0,它也没用.

(我在这个例子中使用的是VB.NET,但也欢迎使用C#解决方案.)

c# vb.net .net-4.0 httpwebrequest .net-3.5

5
推荐指数
1
解决办法
1895
查看次数

处理WM_CLOSE消息发送到C#Tray App

我发现了一些文章,告诉我如何使用WM_CLOSE消息,但从来没有我的应用程序是必须处理WM_CLOSE消息的人.

有没有办法挂钩WM_CLOSE并处理它?因为WM_CLOSE只关闭托盘图标但不终止进程本身...

问候,

.net c#

4
推荐指数
1
解决办法
3544
查看次数

C#:将DllImport与继承结合起来?

在尝试将一些代码从java移植到c#时,我遇到了一些麻烦.

首先,对java代码背后的关键概念进行一些解释:现有代码的关键概念是在外部库中导入/使用方法的类.该类实现了一个接口,该接口声明了外部库中的大多数方法.好处是能够创建像这样的实例

Interface1 instance = new classImplementingInterface1();

我正在尝试移植实现接口的代码并从外部库导入方法.实际上我必须将该接口转换为抽象类,因为java接口使用包含预定义值的字段,这在.NET接口中是不受支持的.

这可能是我的注意点:

public abstract class abstractClassA
{
    public abstract int abstractMethodA(int parameter);
}

public class usualClass : abstractClassA
{
    [DllImort("ExternalLib.dll")]
    public static extern abstractMethodA(int parameter);
}
Run Code Online (Sandbox Code Playgroud)

抽象类用于通过键入能够从实现该抽象类的类创建实例

abstractClassA instance = new usualClass();
Run Code Online (Sandbox Code Playgroud)

好吧,这就是我想要做的,但我发现这不起作用,而我继承了一个抽象类,我将不得不使用override语句来实现我想要实现的方法

public class usualClass : abstractClassA
{
    public extern override abstractMethodA(int parameter);
}
Run Code Online (Sandbox Code Playgroud)

这不会与DllImport语句结合使用,因为它告诉我使用该语句的方法应声明两者:extern和static.添加override关键字以实现抽象类是不可能的,因为静态成员不能声明为override.所以我想我是如何处理的:/

但实际上我想创建一个类来命名外部库的入口点.但我希望这个类实现一个接口/抽象类,以便能够通过键入来创建实现此接口/抽象类的类的实例

abstractClassA instance = new usualClass();
Run Code Online (Sandbox Code Playgroud)

我也尝试使用接口(但没有烦人的静态预定义字段),我发现接口实现也不能与DllImport语句结合使用,编译器说命名方法是静态的,因此无法实现接口方法.这实际上是有道理的,但对我的问题没有可解决的解决方案.

您是否有过这方面的经验或更好的想法?

.net c# windows winapi visual-studio-2010

2
推荐指数
1
解决办法
1360
查看次数

已安装VSTO x64运行时但无法找到

我创建了一个WiX安装程序,为Windows 2010部署了一个添加.目标系统目前安装了x64 Win&Office.我走过几个微软网站告诉我,我需要的不仅仅是x64安装程序和运行时(因为加载加载到当前运行的单词的过程中).此安装程序使用以下语句检查VSTO Runtime是否存在:

<?if $(var.Platform)=x64 ?>
<?define win64Flag = "yes"?>
<?else ?>
<?define win64Flag = "no"?>
<?endif ?>

<Property Id="VSTORUNTIMEREDIST">
    <RegistrySearch Id="VSTORuntimeRedist" Root="HKLM" Key="SOFTWARE\Microsoft\vsto runtime setup\v4R\VSTORFeature_CLR40" Name="Version" Type="raw" Win64="$(var.win64Flag)"/>
</Property>

<Property Id="OFFICERUNTIME">
    <RegistrySearch Id="OfficeRuntime" Root="HKLM" Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4" Name="Version" Type="raw" Win64="$(var.win64Flag)"/>
</Property>
<Condition Message="The Visual Studio 2010 Tools for Office Runtime is not installed. Please install the Office Runtime.">
    <![CDATA[Installed OR VSTORUNTIMEREDIST>="10.0.30319" OR OFFICERUNTIME>="10.0.21022"]]>
</Condition>
Run Code Online (Sandbox Code Playgroud)

实际上它适用于我的安装程序的x86版本,但是在x64模式下构建,它无法在注册表中随时找到x64条目(即使安装了运行时).我已经尝试卸载并重新安装运行时(重新启动)但它不起作用.

我也删除了检查以安装我的Add In,但它没有加载然后实际上.

因此我的问题是,如果有任何已知的错误问题或我使用了错误的注册表项?

.net registry 64-bit wix 32bit-64bit

2
推荐指数
1
解决办法
2744
查看次数

使用 XML 的 XLIFF 转换

我正在尝试使用以下代码将 XLIFF 文件转换回正确的 xml 文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="//body">
      <xliff xmlns="urn:oasis:names:tc:xliff:document:1.1" version="1.1">
        <file source-language="en-US" datatype="plaintext" target-language="de">
            <body>
                <xsl:for-each select="//trans-unit">
                    <xsl:element name="string">
                        <xsl:attribute name="name"><xsl:value-of select="@id"/></xsl:attribute>
                        <xsl:value-of select="target"/>
                    </xsl:element>      
                </xsl:for-each>
            </body>
        </file>
    </xliff>
    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

但它作为返回得到的只是包含在<source>and<target>标签中的字符串。我正在做一些非常错误的事情,或者我错过了一些特殊的标签?

我能够使用简单的 XSLT 脚本成功创建 XLIFF 文件,但我正在努力将其转换回来。

任何想法表示赞赏。

问候, 托马斯

这是 xliff 文件的示例

<?xml version='1.0' encoding='utf-8'?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.1" version="1.1">
  <file source-language="en" datatype="plaintext" target-language="de">
    <body>
      <trans-unit xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:space="preserve" approved="yes" id="firstrun_textview_language_array_names1">
        <source>English</source>
        <target>Englisch</target>
      </trans-unit>
      <trans-unit xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:space="preserve" approved="no" id="firstrun_textview_language_array_names2">
        <source>Chinese (traditional)</source>
        <target>i …
Run Code Online (Sandbox Code Playgroud)

xml xslt xliff

1
推荐指数
1
解决办法
3230
查看次数