小编Chr*_*ins的帖子

STAThread失踪了,但它就在那里

这是我尝试在程序中打开OpenFileDialog时收到的错误消息:

"在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式.确保Main函数上标记了STAThreadAttribute.仅当调试器附加到进程时才会引发此异常."

此错误消息的问题是我的Main方法DOES附加了STAThread属性.我不知道如何处理这个问题.如果它已经存在,我怎么能添加一些东西.加倍它并不是一个好选择,我尝试删除它,构建应用程序,添加它并再次构建它没有成功.我只是不明白.

private void btnOldFind_Click(object sender, EventArgs e)
{
     openFileDialog1.Multiselect = false;
     openFileDialog1.FileName = "";
     openFileDialog1.ShowHelp = false;
     openFileDialog1.AutoUpgradeEnabled = true;
     openFileDialog1.InitialDirectory = @"C:\";
     openFileDialog1.Filter = "Microsoft Installer (*.msi)|*.msi|All Files (*.*)|*.* ";
     openFileDialog1.FilterIndex = 1;
     openFileDialog1.RestoreDirectory = true;

     if (openFileDialog1.ShowDialog() == DialogResult.OK)
     {
         textBoxOldInstallation.Text = openFileDialog1.FileName;
     }
}
Run Code Online (Sandbox Code Playgroud)

主要方法是:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}
Run Code Online (Sandbox Code Playgroud)

并且没有明确地进行线程化.说实话,这是一个非常基本的计划.

EDIT2 :: …

c#

5
推荐指数
2
解决办法
7302
查看次数

WiX3主要升级无法正常工作

我正在尝试进行重大升级,但它无法正常工作.它只是将新程序与旧程序一起安装.他们是在不同的目录(如我的新版本改变了目录结构),所以没有冲突,但旧的需求,以被删除我的产品正常运行.

<Property Id="UPGRADE_NEEDED" Secure="yes" />
<Property Id="SAME_OR_NEWER_VERSION" Secure="yes" />
<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallFinalize" />
</InstallExecuteSequence>
<Upgrade Id="{PUT-YOUR-GUID-HERE}">
    <UpgradeVersion Minimum="5.1.3" OnlyDetect="yes" IncludeMinimum="yes" Property="SAME_OR_NEWER_VERSION" />
    <UpgradeVersion Minimum="5.1" Maximum="5.1.3" Language="1033" Property="UPGRADE_NEEDED" MigrateFeatures="yes" IncludeMinimum="yes" />
Run Code Online (Sandbox Code Playgroud)

这是我的升级元素(当然删除了GUID).如果有人能找到问题所在,我将非常感激.

wix wix3

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

使用批处理文件编辑XML

我想知道是否有任何方法可以创建可以编辑XML文档中的行的批处理文件.该行将由前一行标识.这个想法如下:

If line == Csetting name="BaseDirectory" serializeAs="String">
    Next line = <value>User Input from begining of batch</value>
Run Code Online (Sandbox Code Playgroud)

就是那种甚至可能的东西,还是我在外面做梦?感谢您的帮助和答案.

xml batch-file

4
推荐指数
2
解决办法
2万
查看次数

以编程方式将 WXS 构建到 MSI

我会尽量把它说清楚,但如果你有问题或不完全理解,请告诉我。

我有一个从头开始创建 WXS(WiX 源代码文件)的程序,并对其进行测试以确保它有效。我希望下一个自动步骤是使用 Visual Studio 实际构建 WXS(我正在使用 VS 2008 开发人员版/团队套件版)。我知道可以从 VS 中构建 WiX 项目(其中包含 WXS),并且 WiX 还带有用于构建的命令行实用程序。我正在寻找的是最好的选择。该程序是一个没有 GUI 的命令行实用程序。我知道可以在我的程序中使用命令行,但我不知道如何将它与创建的文件的可变目标和文件名一起使用。朝着正确方向的推动将不胜感激。

c# command-line wix

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

动态创建VS Project

我有一个项目,我创建WiX(Windows Installer for XML)文件,当它们不存在时.它工作得很好.现在我想扩展它以添加更多功能.我想知道是否有办法以编程方式创建Visual Studio项目?这个项目是作为我们每晚构建过程的一部分运行的,当需要一个新的wix文件时,它会被创建,但是我希望在构建完成后将所有内容都安装好,所以如果有必要,你可以在Visual Studio中打开项目,开始编辑.我是在梦境之外做梦还是不在?任何推动正确的方向将非常感激.

c# wix visual-studio-2008

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

WiX包"评论"和"关键字"

我有点难以理解使用Package元素获得Comments和Keywords属性的观点.WiX主页简单地说"浏览的可选评论"和"用于浏览的可选关键字".那里没有太大的帮助.它们是用在ARP中,还是只用于制作MSI的细节或者是什么?谢谢(你的)信息!

wix

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

停止线程

情况就是这样.我有一个线程,只需单击一个按钮即可开始.它然后工作大约2分钟(给予或采取相当多)然后完成,更新UI和一直.这很好.现在我决定在混音中添加一个"取消"按钮.我的问题是什么是从外部阻止线程的最佳方法?什么方法最好完全避免?我可以通过哪些资源了解自己,以获得有关该主题的更多知识.

另一条信息.该程序不是由我编写的,我只是"继承"它,现在我试图以小的方式扩展它的功能,使其更加用户友好.

编辑:使用VS2008和.NET 3.5

c# multithreading

2
推荐指数
3
解决办法
3674
查看次数

返回值风格问题

可以说我有以下代码

public static string GetXMLValue()
{
    XDocument settingsFile = XDocument.Load("Settings.xml");
    return settingsFile.Element("Settings").Element("GenericValue").Value;
}
Run Code Online (Sandbox Code Playgroud)

它只是读取XML设置文件并返回GenericValue值.它不能比那更简单.现在我的问题是,它是否会提供任何好处(可读性,性能,语法,维护等),首先将返回值放在字符串变量中然后返回?或者最好离开它的方式?

c# coding-style

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

try-catch中未处理的异常

try
{
     list = from XElement e in d.Descendants(wix + "File")
            where e.Attribute("Name").Value.Contains(temp.Name) &&
            e.Parent.Parent.Attribute("Name").Value.Contains(temp.Directory.Name)
            select e;
}
catch (NullReferenceException e)
{
     MessageBox.Show(e.Message);
}
catch (Exception e)
{
     MessageBox.Show(e.Message);
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是为什么这段代码产生运行时错误,说我有一个未处理的NullReferenceException.如果您需要有关该计划的更多信息,请通知我.

编辑:调试器指向linq语句的"where"部分.当我直接从exe文件运行这个程序时,我仍然得到异常.

c# exception try-catch unhandled-exception

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