小编tmo*_*e82的帖子

我可以告诉Inno Setup*而不是*来创建unins000文件

我正在使用Inno安装程序将第三方安装程序与我构建的另一个EXE打包,为我们的安装环境做好准备.我真的想在完成后删除最终用户计算机上的所有安装程序文件.我尝试使用deleteafterinstallInno创建的临时目录,但它不起作用.Inno自动创建unins000.exeunins000.dat在安装目录中.因此,当它尝试删除根目录时,它会发现它不是空的.

我不需要Inno的卸载程序,因为3P应用程序有自己的.我可以告诉Inno Setup 不要创建unins000文件吗?或者我可以告诉它删除临时目录,即使它不是空的吗?

inno-setup uninstall

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

C# 从列表框中拖放

我正在尝试构建一个简单的界面,该界面允许用户将文件放入 alistBox以将它们添加到进程中,并将它们拖出以将其删除。一切正常,但我想添加一个功能,让它更复杂一点。

现在,我删除了与DragLeave事件相关的项目,这意味着只要鼠标离开框,项目就会被删除。但我希望用户能够改变主意。换句话说,如果他们意识到他们拖出了错误的文件,我希望他们能够将鼠标移回listBox并释放鼠标以取消操作。我认为这意味着我需要能够捕获MouseUp事件而不是DragLeave事件。但这到目前为止还没有成功。

下面是我目前用于删除拖出的文件的代码。如何修改以防止文件从列表中删除,直到用户松开鼠标按钮?

private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
    if (listBox1.Items.Count == 0)
    { 
        return; 
    }

    int index = listBox1.IndexFromPoint(e.X, e.Y);
    string s = listBox1.Items[index].ToString();
    DragDropEffects dde1 = DoDragDrop(s, DragDropEffects.All);
}

private void listBox1_DragLeave(object sender, EventArgs e)
{
    ListBox lb = sender as ListBox;
    lb.Items.Remove(lb.SelectedItem);
}
Run Code Online (Sandbox Code Playgroud)

编辑 2013/05/16

到目前为止的评论和答案很有用,但我意识到我的问题还不够清楚。在这种情况下,我将显示一个与父表单分开的对话框,该对话框基本上与listBox. 当有人将文件拖出列表时,他们将其完全拖出表单。我这样做是否让自己陷入困境?我承认我让它变得比它更难,但如果可能的话,我仍然想看看它是如何工作的。

c# drag-and-drop event-handling

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

C read() 线程安全吗?

我正在编写一个程序,其中多个线程可能同时从文件中读取。没有线程写入该文件,但它们可能各自将其内容复制到单独的内存段。

为了实现这一点,我需要使用一个 API,为我想要读取的文件提供一个文件描述符。我正在使用 C 函数读取文件的块read。手册页说:“成功时,返回读取的字节数(零表示文件末尾),并且文件位置将按此数字前进。” 不过,我找不到任何关于文件位置的前进是否是线程安全的明确信息。

假设我有线程 T1 和线程 T2 一次读取文件的 1 个字节。如果read()是线程安全的,我期望以下内容:

T1: read() => file position == 1
T2: read() => file position == 1
T1: read() => file position == 2
T2: read() => file position == 2
...
Run Code Online (Sandbox Code Playgroud)

但我担心如果它不是线程安全的,那么可能会发生以下情况:

T1: read() => file position == 1
T2: read() => file position == 2
T1: read() => file position == 3
T2: read() => file position == 4
...
Run Code Online (Sandbox Code Playgroud)

如果有帮助,每个线程将使用相同的文件描述符。换句话说,它是使用open() …

c linux multithreading file thread-safety

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

在CentOS 6上的OTRS安装期间重新启动httpd时出错

我正在尝试在Cent OS 6.5(最终版)上安装OTRS Help Desk 3.3.2.初始安装(yum install)进展顺利.下一步是重新启动httpd,但重启仍然失败.我没有在控制台中收到错误,但是当我检查错误日志时,我可以看到它每次失败都是出于同样的原因:

[Mon Dec 09 15:59:42 2013] [error] Can't locate 
    /opt/otrs/scripts/apache2-perl-startup.pl in @INC 
    (@INC contains: /usr/local/lib64/perl5 
    /usr/local/share/perl5 
    /usr/lib64/perl5/vendor_perl 
    /usr/share/perl5/vendor_perl 
    /usr/lib64/perl5 
    /usr/share/perl5 . /etc/httpd) at (eval 2) line 1

[Mon Dec 09 15:59:42 2013] [error] Can't load Perl file: 
    /opt/otrs/scripts/apache2-perl-startup.pl 
    for server vsvrotrsdev.companydomain.com:0, exiting...
Run Code Online (Sandbox Code Playgroud)

我是Linux/Apache/OTRS菜鸟,所以我不知道如何处理错误.到目前为止,搜索并没有产生太大的影响.

编辑

我发现了一些@INC关于它是什么以及如何工作的帖子.我已经尝试将/ opt/otrs/scripts添加到@INC,但这似乎没有帮助.

linux apache install otrs

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

Excel VBA Shell.Namespace返回Nothing

我正在尝试使用Excel VBA提取.CAB文件,但是我收到以下错误:

运行时错误'91':

对象变量或未设置块变量

当我忘记使用SetObject时,我通常会得到这个,但我已经检查过了.

我能找到的所有例子都是这个主题的变体:

Private Function DeCab(vSource, vDest) As Long
    Dim objShell, objFileSource, objFileDest As Object
    Set objShell = CreateObject("Shell.Application")
    Set objFileSource = objShell.Namespace(vSource)
    Set objFileDest = objShell.Namespace(vDest)
    Call objFileDest.MoveHere(objFileSource.Items, 4 Or 16) 'Fails here
    Decab = objFileDest.Items.Count
End Function
Run Code Online (Sandbox Code Playgroud)

这不是失败就Set行,但它都设置objFileSource以及objFileDestNothing即使我已经证实vSourcevDest存在.

要确认它与.CAB文件无关,我也尝试过它而不设置objFileSource和检查设置objFileDest后的值.它仍然会回来Nothing.那为什么会这样?我在运行Office 2010的Windows 7,64位上运行.

shell excel vba excel-vba

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

C#:帮助抛光字符串解析

我真正重视这个社区的一件事就是学习用两行做事的方法,这两行通常需要20个.本着这种精神,我已经尽力将一些字符串解析从大约十几行到三行.但我觉得有人想告诉我这实际上是一团糟.仅仅为了我自己的启发,是否有更简洁的方法来做以下事情?这一切都可以在一条线上完成吗?

string getThis = "<add key=\"messageFilter\" value=\"";
string subStr = strFile.Substring(strFile.IndexOf(getThis) + getThis.Length);
string[] igPhrases = subStr.Substring(0, subStr.IndexOf(";\"")).Split(';');
Run Code Online (Sandbox Code Playgroud)

UPDATE

感谢您的快速回复!真正有用的例子和良好的建议与最低限度的snark.:)更少的线条与干净优雅不同,减少线条实际上可能会使代码变得更糟.

让我重新解释一下这个问题.

我有一个XML文档,其中包含以下行:<add key="messageFilter" value="Out of Office AutoReply;Automatic reply;"/>.此文档告诉我们的自动售票系统不会从主题行中包含这些短语的电子邮件创建票证.否则,我们会得到无限循环.

我正在开发一个小程序,它将列出已包含的短语,然后允许用户添加新短语.如果我们注意到新的自动回复消息开始在系统中循环,我们需要能够将该消息的语言添加到过滤器.

我对XML并没有太多的工作.我喜欢Sperske的解决方案,但我不知道如何让它变得动态.换句话说,我不能把价值放在我的代码中.我需要找到键"messageFilter",然后获取与该键相关的所有值.

我所做的工作,但似乎有点麻烦.是否有更简单的方法来获取关键值?并添加一个新的?

c# xml parsing

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